~ubuntu-branches/debian/sid/pyro/sid

« back to all changes in this revision

Viewing changes to docs/12-changes-archive.html

  • Committer: Bazaar Package Importer
  • Author(s): Carl Chenet, Carl Chenet, Jakub Wilk
  • Date: 2010-09-14 01:04:28 UTC
  • Revision ID: james.westby@ubuntu.com-20100914010428-02r7p1rzr7jvw94z
Tags: 1:3.9.1-2
[Carl Chenet]
* revert to 3.9.1-1 package because of the development status 
  of the 4.1 package is unsuitable for stable use
  DPMT svn #8557 revision (Closes: #589172) 
* added debian/source
* added debian/source/format
* package is now 3.0 (quilt) source format
* debian/control
  - Bump Standards-Version to 3.9.1

[Jakub Wilk]
* Add ‘XS-Python-Version: >= 2.5’ to prevent bytecompilation with python2.4
  (closes: #589053).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 
2
<html>
 
3
<!-- $Id: 12-changes-archive.html,v 2.8.2.2 2008/06/28 23:41:01 irmen Exp $ -->
 
4
<head>
 
5
  <title>PYRO - Change Log (archive)</title>
 
6
  <link rel="stylesheet" type="text/css" href="pyromanual_print.css" media="print">
 
7
  <link rel="stylesheet" type="text/css" href="pyromanual.css" media="screen">
 
8
</head>
 
9
 
 
10
<body>
 
11
  <div class="nav">
 
12
  <table width="100%">
 
13
    <tr>
 
14
      <td align="left"><a href="11-services.html">&lt;previous</a> | <a href="PyroManual.html">contents</a></td>
 
15
 
 
16
      <td align="right">Pyro Manual</td>
 
17
    </tr>
 
18
  </table>
 
19
<hr></div>
 
20
 
 
21
  <h2>Pyro Change Log (archive)</h2>
 
22
 
 
23
  <p>The recent Pyro versions can be found in the regular <a href="12-changes.html">change log</a>.</p>
 
24
 
 
25
  <p>Pyro 0.1 has been lost in the dust. It wasn't suited for publication anyway, I guess :-)</p>
 
26
 
 
27
  <h3>Pyro 0.2</h3>First working release. Only static proxies and very little configurability.
 
28
 
 
29
  <h3>Pyro 0.3</h3>
 
30
 
 
31
  <ul>
 
32
    <li>MAJOR: added Dynamic Proxies! Clients don't need to have a precompiled proxy file available any more! Check out
 
33
    <code>core.getProxyForURI/DynamicProxy</code>.</li>
 
34
 
 
35
    <li>MAJOR: reworked the configuration possibilities. Check out <code>__init__.py</code>.</li>
 
36
 
 
37
    <li>Moved config items to a class in <code>__init__.py</code>. They are accessed using
 
38
    '<code>Pyro.config.&lt;item&gt;</code>'.</li>
 
39
 
 
40
    <li>Made the port and broadcast port configurable independently. The command lines now accept options to specify
 
41
    either or both ports.</li>
 
42
 
 
43
    <li>naming: added delay in broadcast loop (wait a little for replies to arrive), Naming Service now returns
 
44
    PyroErrors instead of regular exceptions.</li>
 
45
 
 
46
    <li>core: Cleaned up the Pyro exception passing, added <code>DynamicProxy</code> and
 
47
    <code>getProxyForURI</code></li>
 
48
 
 
49
    <li>pyroc: fixed bug in method output code (could forget a comma)</li>
 
50
 
 
51
    <li>nsc: fully rewrote the parsing code to use the <code>util.ArgVParser</code></li>
 
52
 
 
53
    <li>scripts: the Window <code>.bat</code> files now use <code>%$</code></li>
 
54
 
 
55
    <li>added <code>util.py</code>, which contains a basic <code>sys.argv</code> parser like
 
56
    <code>getopt()</code>.</li>
 
57
  </ul>
 
58
 
 
59
  <h3>Pyro 0.4</h3>
 
60
 
 
61
  <ul>
 
62
    <li>naming: changed broadcast server to reflect changes in Python 1.5.2's <code>SocketServer</code> module. Pyro
 
63
    now requires this new <code>SocketServer</code> module (which works with previous Python versions, too, so you
 
64
    could only replace the <code>SocketServer</code> module and keep the rest of your Python installation intact).</li>
 
65
 
 
66
    <li>naming: fixed bugs when reporting exceptions ('entry already exists' and 'not found').</li>
 
67
 
 
68
    <li>util: added <code>getUUID</code> function, and a script <code>genuuid</code>.</li>
 
69
 
 
70
    <li>core: Pyro objects are now identified by a full UUID, instead of a simple Python <code>id()</code>. This should
 
71
    prevent nasty object ID problems, especially later when persistent naming and object activation will be
 
72
    implemented.</li>
 
73
  </ul>
 
74
 
 
75
  <h3>Pyro 0.5</h3>
 
76
 
 
77
  <ul>
 
78
    <li>MAJOR: the Pyro Naming Service now is a Pyro object itself, too. It can be accessed through its Pyro
 
79
    interface.</li>
 
80
 
 
81
    <li>More specific exceptions (<code>ProtocolError, URIError, DaemonError, NamingError</code>...)</li>
 
82
 
 
83
    <li>It is now possible to connect objects without the presence of a Naming Service.</li>
 
84
 
 
85
    <li>core: the Daemon can now handle requests for others too, by a callback mechanism. Also removed up the
 
86
    server-side exception trace info when the exception is generated on purpose, and added a nice message when the
 
87
    daemon cannot be started.</li>
 
88
 
 
89
    <li>naming: many changes to make the Name Server a Pyro object itself. Finding the NS is now done through the
 
90
    <code>NameServerLocator</code>, which returns a regular Pyro proxy for the NS. No <code>NameServerClient</code> is
 
91
    needed anymore.</li>
 
92
 
 
93
    <li>util: tweaked the way the timestamp in URIs is generated.</li>
 
94
 
 
95
    <li>config: more configurable items.</li>
 
96
 
 
97
    <li>scripts: <code>Pyroc.bat</code> now uses <code>%$</code>, too (oops!)</li>
 
98
  </ul>
 
99
 
 
100
  <h3>Pyro 0.6</h3>
 
101
 
 
102
  <ul>
 
103
    <li>Added <code>xnsc</code>, a naming service control tool with a GUI (uses <code>Tkinter</code>).</li>
 
104
 
 
105
    <li>The naming service can be launched in 'persistent mode': it will keep the naming directory in a persistent
 
106
    database on disk. EXPERIMENTAL!</li>
 
107
 
 
108
    <li>core: added 2 configuration variables in <code>Pyro.config</code>: <code>PYRO_PATH</code> and
 
109
    <code>PYRO_STORAGE</code>.</li>
 
110
 
 
111
    <li>core: added method to <code>ObjBase</code> to set a fixed (persistent) object UUID.</li>
 
112
 
 
113
    <li>core: slight change in the init code of <code>PyroURI</code>, it can now be created directly from a URI string,
 
114
    instead of using <code>initFromString</code>.</li>
 
115
 
 
116
    <li>core: the <code>Daemon</code> now has preliminary support for persistent objects:
 
117
    <code>connectPersistent</code> and <code>disconnectPersistent</code> methods were added. LIKELY TO CHANGE!</li>
 
118
 
 
119
    <li>naming: added a persistent name server class <code>PersistentNameServer</code>. Also added some code to deal
 
120
    with this when using the '<code>ns</code>' command line tool: a new option '<code>-db</code>' has been added to
 
121
    specify persistent mode.</li>
 
122
 
 
123
    <li>naming: the broadcast server now binds on '' instead of the hostname. This appears to be more compatible (on
 
124
    some systems it was impossible to connect to the broadcast server).</li>
 
125
 
 
126
    <li>naming: implemented graceful shutdown command. The server also uses a timeout loop for the requests (because
 
127
    otherwise ^C wouldn't break gracefully on WinNT - Duh).</li>
 
128
 
 
129
    <li>scripts: <code>nsc</code> (and <code>xnsc</code>) now print a sorted list (and have the shutdown command).</li>
 
130
 
 
131
    <li>scripts: the <code>.bat</code> files now won't echo the python command anymore.</li>
 
132
 
 
133
    <li>utils: <code>ArgParser</code> changed to use <code>None</code> instead of <code>1</code> when no arguments are
 
134
    given to a certain option.</li>
 
135
 
 
136
    <li>test: <code>testclient</code> will use dynamic proxy automatically if no static proxy is found. Also, it will
 
137
    try a direct connect if the NS lookup by broadcast fails.</li>
 
138
  </ul>
 
139
 
 
140
  <h3>Pyro 0.7</h3>
 
141
 
 
142
  <ul>
 
143
    <li>bumped all versions to 0.7</li>
 
144
 
 
145
    <li>NOTE: because of some changes you will have to generate your proxies again with <code>pyroc</code>!</li>
 
146
 
 
147
    <li>core: separated the Exception types and the protocol adapters to <code>errors.py</code> and
 
148
    <code>protocol.py</code>.</li>
 
149
 
 
150
    <li>util: added a <code>Logger</code> object, <code>Log</code>. It is used throughout Pyro to log messages,
 
151
    warnings and errors. You can configure the logfile and the trace level settings with some new configuration
 
152
    options. Ofcourse you can use it for your own logging purposes too.</li>
 
153
 
 
154
    <li>init: changed the way configuration items are set up. If a corresponding environment variable exists, that
 
155
    value is used. Otherwise the default applies. This works for all configuration options except
 
156
    <code>PYRO_NS_NAME</code> because that is a registered name and should not be changed.</li>
 
157
 
 
158
    <li>naming: the naming server now writes its URI to a special output file. This can be used to contact the naming
 
159
    server if you can't use the broadcast locator for some reason.</li>
 
160
 
 
161
    <li>uuids: renamed UUID to GUID (Globally Unique ID). You can never be sure that your ID is Universally Unique, so
 
162
    I changed the name. Also, the <code>genuuid</code> scripts have been renamed to <code>genguid</code>.</li>
 
163
 
 
164
    <li>changed default pickling mode to binary, to improve performance. A new configuration option lets you choose
 
165
    between ASCII or binary.</li>
 
166
 
 
167
    <li>pyroc: fixed a problem where the '<code>self</code>' argument of a member function had a different name. Pyroc
 
168
    now uses '<code>S</code>' everywhere.</li>
 
169
 
 
170
    <li>pyroc: added support for inherited classes. A module within a Python package is not yet supported as
 
171
    input!</li>
 
172
 
 
173
    <li>pyroc: explicit checks against special Python methods <code>__xxx__</code>. They are not allowed in the proxy
 
174
    code.</li>
 
175
 
 
176
    <li>MAJOR documentation update.</li>
 
177
  </ul>
 
178
 
 
179
  <h3>Pyro 0.8</h3>
 
180
 
 
181
  <ul>
 
182
    <li>A few fixes in the source comments.</li>
 
183
 
 
184
    <li>Added separate user logging facility and fixed small bug in logger code (it was too picky on the
 
185
    arguments).</li>
 
186
 
 
187
    <li>Moved some protocol dependent code from <code>core.py</code> to <code>protocol.py</code></li>
 
188
 
 
189
    <li>New exception model! See documentation! Basically, every exception on the server side will be catched and
 
190
    raised on the client side.</li>
 
191
 
 
192
    <li>Naming server and the <code>nsc</code> and <code>xnsc</code> tools are stricter with the names and URIs they
 
193
    allow.</li>
 
194
 
 
195
    <li>GUIDs are now 128 bit (instead of 144) and Pyro can use Windows GUIDs on the Windows platform. This is
 
196
    configurable trough a new configuration item <code>PYRO_USE_WIN32GUID</code>. This is <em>not</em> the default and
 
197
    will work only on the Windows platform, because the Python COM extension is used for this.</li>
 
198
 
 
199
    <li>New <code>genguid</code> script with '<code>-w</code>' argument to generate a Windows GUID if possible.</li>
 
200
 
 
201
    <li>Fixed some things to allow for special 'localhost' optimization (the reduced overhead of some network
 
202
    implementations when using 'localhost' instead of the real hostname). The changes are:
 
203
 
 
204
      <ul>
 
205
        <li>Pyro daemon now binds on '' instead of hostname. Previously, URIs with the 'localhost' hostname couldn't be
 
206
        bound.</li>
 
207
 
 
208
        <li>The <code>PyroURI</code> class has a new <code>optimizeLocalhost</code> method, which -if possible-
 
209
        optimizes the URI for localhost addressing.</li>
 
210
      </ul>This also paves the way for more optimizations might be added when Pyro detects a local URI. (for instance,
 
211
      using IPC instead of going trough the network)
 
212
    </li>
 
213
 
 
214
    <li>Implemented Delegate pattern for remote object implementations. Instead of subclassing your object
 
215
    implementation from <code>Pyro.core.ObjBase</code>, you just create a <code>Pyro.core.ObjBase</code> object and
 
216
    tell it to use another object as a delegate.</li>
 
217
 
 
218
    <li>New <code>ArgParser</code> in <code>util.py</code>, to support more convenient script arguments. A few scripts
 
219
    have slightly altered syntaxes now, which should be more convenient. The old syntax should still work however.</li>
 
220
 
 
221
    <li>Documentation updates. Major addition is the new chapter with a practical guide about how to develop Pyro
 
222
    programs.</li>
 
223
  </ul>
 
224
 
 
225
  <h3>Pyro 1.0</h3>
 
226
 
 
227
  <ul>
 
228
    <li>MAJOR: Reimplemented the PYRO protocol. It now uses a MUD-like system instead of a webserver-like system. The
 
229
    protocol used to create a new socket connection for each method call. This is inefficient and resource hungry. The
 
230
    new implementation uses a single socket for each Pyro object, and all method calls and replies are passed over this
 
231
    connection. The connection remains active until the object is no longer needed. The new implementation no longer
 
232
    has the serious problem that the previous implementation had on most machines: when a lot of method calls were
 
233
    made, the system would crash with some sort of 'resource unavailable' or 'out of memory' error. The new protocol is
 
234
    also faster than the previous one on all systems.</li>
 
235
 
 
236
    <li>Because of the new protocol, I think Pyro now deserves the version 1 status: bumped all version numbers to
 
237
    1.0</li>
 
238
 
 
239
    <li>The Pyro <code>Daemon</code> inherits from the new <code>TCPServer</code> base class (in
 
240
    <code>protocol.py</code>). This server replaces the <code>SocketServer.TCPServer</code>. The new server keeps a
 
241
    list of active connections, while the old one operated like a webserver: it created a new socket connection for
 
242
    each request.</li>
 
243
 
 
244
    <li>Pyro Daemon has been adapted to the new protocol.</li>
 
245
 
 
246
    <li><strong>NOTE:</strong> The new PYRO protocol is <em>incompatible</em> with the older versions. Communication is
 
247
    impossible between different Pyro versions. You should upgrade all Pyro installations to the new version. However,
 
248
    user code does <em>not</em> have to be changed. Old code still runs on top of the new implementation (the API has
 
249
    not been changed).</li>
 
250
 
 
251
    <li>The Windows .bat scripts now use <code>#*</code> instead of <code>#$</code> (which didn't work on the standard
 
252
    Windows95/NT command prompt).</li>
 
253
 
 
254
    <li><code>xnsc</code> handles communication errors better.</li>
 
255
 
 
256
    <li>Organized the tests in the <code>test</code> directory and added some readme files. Also added some more
 
257
    tests/examples.</li>
 
258
 
 
259
    <li>Moved some socket code out of other modules to <code>protocol.py</code>. Now only <code>naming.py</code> and
 
260
    <code>protocol.py</code> have socket code.</li>
 
261
 
 
262
    <li>Removed the <code>NULLAdapter</code>.</li>
 
263
 
 
264
    <li>Removed the pickling of NS system commands. They're simple strings now.</li>
 
265
 
 
266
    <li>Added socket send/receive helper functions in <code>protocol.py</code> for robust data transmission. The new
 
267
    protocol code uses them. Performance is lower but the new code should guarantee correct behaviour even at high
 
268
    network loads with many packet losses and fragmentations.</li>
 
269
 
 
270
    <li>New exceptions <code>SocketClosedError</code> and <code>ServerFullError</code>.</li>
 
271
 
 
272
    <li>Removed <code>RemotePyroException</code> (unused).</li>
 
273
 
 
274
    <li>Small change in the <code>xnsc</code> GUI: better resizing</li>
 
275
 
 
276
    <li>The new protocol enforces a limit on the number of simultaneous connections to each Pyro daemon. This is for
 
277
    protection of the server machine. There is a new configuration item <code>PYRO_MAXCONNECTIONS</code> that sets this
 
278
    limit. Currently the default is 200.</li>
 
279
 
 
280
    <li>The <code>unregister</code> method of the naming service now raises a <code>NamingError</code> when the name is
 
281
    not known. I added this because usually this signals a typo in the calling code (it should never unregister an
 
282
    unknown name).</li>
 
283
 
 
284
    <li>Documentation updates; manual is finished except for the implementation chapter.</li>
 
285
  </ul>
 
286
 
 
287
  <h3>Pyro 1.1</h3>
 
288
 
 
289
  <ul>
 
290
    <li>MAJOR: Naming Service now has a hierarchical namespace. It has groups, which can contain other
 
291
        groups or names. By default, a dot ('.') in a name is the group separator, so that &quot;group1.group2.name&quot;
 
292
        is a hierarchical name. Notice that this is much like DNS's host/domain name scheme, but <em>in
 
293
        reverse order</em>, rather like a directory
 
294
    structure in a disk file system. The big gain from all this is that you can have different &quot;domains&quot;
 
295
        (namespaces) in your Pyro environment. With a simple change of the default namespace group your
 
296
        system uses a different &quot;domain&quot;
 
297
    and the object names will not interfere with other systems (provided your namespace group is unique).
 
298
    For an application of this, see the new test programs, which now all use the ':test' namespace group.
 
299
    Also, it opens the gates for an even more sophisticated naming service: a distributed federated hierarchical
 
300
    nameservice (wow!! :-)</li>
 
301
 
 
302
    <li>The default or de facto namespace group is &quot;:Default&quot;. This means that Pyro code that does
 
303
        not (yet) use the new naming scheme will wind up registering all its object names in this namespace
 
304
        group. That's nice because this is a simple way to avoid name clashes with legacy Pyro code and
 
305
        new code.</li>
 
306
 
 
307
    <li>Adapted the NS proxy to enforce the default group on all names that are not absolute from the root. It is now
 
308
    required that all names passed to the NS are absolute (fully expanded), the hand coded NS proxy takes care of this.
 
309
    Note that a proxy obtained for the NS by other means <em>does not have this feature</em> and will likely break your
 
310
    code! Notably, the use of a dynamic proxy for the NS will no longer work correctly. Always use the <em>static
 
311
    proxy</em> from the <code>naming</code> module.</li>
 
312
 
 
313
    <li>Added configuration item <code>PYRO_NS_GROUPSEP</code>, which is the character that separates groups in names.
 
314
    By default it is a dot ('.'), but if this proves incompatible with existing naming schemes (that use dots in the
 
315
    names), just change it to something else. Notice that this item is only examined <em>once</em>: at startup time.
 
316
    You have to restart the Naming Service if you change this item.</li>
 
317
 
 
318
    <li>Added configuration item <code>PYRO_NS_DEFAULTGROUP</code>, which is the default group name in which names are
 
319
    located. This simplifies partitioning your name space greatly. Notice that the Name Server proxy code is hand
 
320
    crafted to enforce this name.</li>
 
321
 
 
322
    <li>Added configuration item <code>PYRO_NS_ROOTCHAR</code>, which is the default escape character at the beginning
 
323
    of names, which indicates the name is absolute from the root.</li>
 
324
 
 
325
    <li>Changed the config item for the name server name to include a root character. Existing code should not break
 
326
    (if it does, you probably didn't use <code>PYRO_NS_NAME</code>...</li>
 
327
 
 
328
    <li>Extended the name server object with three new remote methods for hierarchical naming support:
 
329
    <code>createGroup</code>, <code>deleteGroup</code> and <code>list</code>. Furthermore, <code>status</code> has been
 
330
    renamed to <code>flatlist</code>. This suggests better what it does: return a flat dump of the namespace.</li>
 
331
 
 
332
    <li>Extended <code>nsc</code> and <code>xnsc</code> with the new naming service features: <em>list</em>,
 
333
    <em>creategroup</em> and <em>deletegroup</em> commands. (The old <em>list</em> command was renamed to
 
334
    <em>listall</em>).</li>
 
335
 
 
336
    <li>Simplified dynamic proxy. It used to create a invocation object with each method call, this is no longer
 
337
    so.</li>
 
338
 
 
339
    <li>Fixed bug in <code>protocol.py</code> where a <code>KeyError</code> in a method invocation was always treated
 
340
    as if a method call on an unknown object was tried, even when the object was correct (but raised a
 
341
    <code>KeyError</code>)</li>
 
342
 
 
343
    <li>Naming service will no longer crash when an unexpected exception occurs while it is running. It will log and
 
344
    print the error and resume operations. A ctrl-c (<code>KeyboardInterrupt</code>) will still abort it, however, as
 
345
    will sending a <em>shutdown</em> command.</li>
 
346
 
 
347
    <li>Small change in the Daemon in <code>core.py</code>. If a ProtocolError is detected (for instance, an invalid
 
348
    header), the connection is dropped and operations are resumed. Pyro used to block or crash when a non-Pyro client
 
349
    connected, such as a plain telnet or a web browser pointed at Pyro's socket.</li>
 
350
 
 
351
    <li>Test servers and clients are now using common code bases. They're registering their names in
 
352
        a new &quot;<code>:test</code>&quot; group (namespace) too, to help avoid conflicts with your
 
353
        own names. Servers will no longer crash if their name is already registered (they just register
 
354
        again).</li>
 
355
 
 
356
    <li>Fixed a few small errors in some of the test programs, and created an electronic banking example to be a nice
 
357
    starting point for Pyro applications.</li>
 
358
 
 
359
    <li>Fixed bug in some default arguments to functions, where config items were used. Now they are parsed at use
 
360
    instead of at module import time.</li>
 
361
 
 
362
    <li>Added '<code>-k</code>' switch to <code>ns</code> that will start the NS in a mode in which it ignores shutdown
 
363
    requests sent by <code>nsc</code>. This is a crude form of security, to protect the NS for malicious
 
364
    shutdowns.</li>
 
365
 
 
366
    <li>Documentation updates about the new naming scheme.</li>
 
367
 
 
368
    <li>New example added that uses the new naming functions.</li>
 
369
 
 
370
    <li>Configuration files! You can now use a configuration file that contains all required Pyro config options. It's
 
371
    no longer necessary to use a big list of environment variables.</li>
 
372
 
 
373
    <li>New configuration item <code>PYRO_CONFIG_FILE</code>. Only useful as environment variable, it points to the
 
374
    configuration file Pyro has to use.</li>
 
375
  </ul>
 
376
 
 
377
  <h3>Pyro 1.2</h3>
 
378
 
 
379
  <ul>
 
380
    <li>Fixed bug in TCPserver code (could skip connections). Please update all Pyro installations because this was a
 
381
    rather nasty bug.</li>
 
382
 
 
383
    <li><code>Daemon.connect</code> now returns the URI it connects the object as. This is convenient for servers that
 
384
    want to use the URI immediately without having to consult the nameserver.</li>
 
385
 
 
386
    <li>It's now possible to get/set attributes on Pyro objects with normal Python syntax! (changes to
 
387
    <code>ObjBase</code> and new <code>DynamicProxyWithAttr</code>) <em>You have to update all Pyro installations if
 
388
    you want to use this new feature.</em> If you don't use it, Pyro 1.2 should work together with version 1.1. Notice
 
389
    that there is a performance hit of a few percent when you use <code>DynamicProxyWithAttr</code> instead of the
 
390
    regular <code>DynamicProxy</code> to support the attribute feature.</li>
 
391
 
 
392
    <li>Server objects can now create new Pyro objects and marshal Proxy objects to the clients! (changes to
 
393
    <code>DynamicProxy</code>: it delays binding until actually needed, and they can now be safely pickled).</li>
 
394
 
 
395
    <li>Added two new examples to show the use of the new attribute getting/setting, and the creation of new Pyro
 
396
    objects on the server.</li>
 
397
 
 
398
    <li>Fixed bug in proxy code: nested method calls didn't work. For instance,
 
399
    <code>obj.setCount(obj.getCount()+1)</code> now works correctly.</li>
 
400
 
 
401
    <li>Daemons (servers) now have a <em>port range</em>. This means that they try to obtain a network port within a
 
402
    range, instead of a single configured port as it was before. The port range allows you to start multiple
 
403
    daemons/servers on a single machine, they now automatically select the next available network port.</li>
 
404
 
 
405
    <li>New configuration item for the port range: <code>PYRO_PORT_RANGE</code>.</li>
 
406
 
 
407
    <li>Upgraded <code>pyroc</code> to 1.2; static proxies now also support direct attribute access.</li>
 
408
 
 
409
    <li>Documentation updates for new features.</li>
 
410
  </ul>
 
411
 
 
412
  <h3>Pyro 1.3</h3>
 
413
 
 
414
  <ul>
 
415
    <li>Removed the <code>DaemonSlave</code> class. Moved it into the <code>Daemon</code> class. Also required small
 
416
    change to <code>TCPServer</code>.</li>
 
417
 
 
418
    <li>GUID format changed: internally, GUIDs are now treated as a 128 bit binary number (represented as a string of
 
419
    16 8-bit characters). This saves memory and network bandwidth. Visually, the number is printed as 4 chunks of
 
420
    unsigned 32 bit hex, separated by a dash.</li>
 
421
 
 
422
    <li>Because of the previous change, the PYRO protocol is no longer compatible with the previous versions.
 
423
        It identifies itself with version 1 rev 3 and raises &quot;incompatible version&quot; exceptions if
 
424
        you try to connect with other protocol versions. Please update all Pyro installations to version
 
425
        1.3</li>
 
426
 
 
427
    <li>To handle versioning things better, a few changes in <code>protocol.PYROAdapter</code> were also
 
428
    necessary.</li>
 
429
 
 
430
    <li>Added optional hostname argument to <code>TCPServer</code> and <code>Pyro.core.Daemon</code>.
 
431
        The
 
432
    <code>ns</code> command has a new option &quot;-n&quot; to specify a specific hostname to bind the server
 
433
    on.</li>
 
434
 
 
435
    <li>Removed <code>optimizeLocalhost</code> method from <code>PyroURI</code></li>
 
436
 
 
437
    <li>URIs no longer use hostnames, they now encode the IP addresses directly. This solves some problems when a DNS
 
438
    service is not available. <code>PyroURI</code> consequently has an <code>address</code> member instead of the
 
439
    previous <code>host</code> member. There are some small changes throughout the code to support this.</li>
 
440
 
 
441
    <li>Removed 1.5.2 dependency on <code>os.path.abspath</code>.</li>
 
442
 
 
443
    <li>Fixed bug in Daemon <code>handleRequest</code> loop: in contrast to what the documentation says, it didn't
 
444
    return after a request had been processed. It now does.</li>
 
445
 
 
446
    <li>WIN32 GUIDs have been removed, and the corresponding configuration item too
 
447
    (<code>PYRO_USE_WIN32GUID</code>).</li>
 
448
  </ul>
 
449
 
 
450
  <h3>Pyro 1.4</h3>
 
451
 
 
452
  <ul>
 
453
    <li>One word: <em>multithreaded</em>. A few changes in the <code>TCPServer</code> allows it to run in multithreaded
 
454
    mode on systems that have Python threads. Please read the <em>Rules and Limitations</em> chapter for more
 
455
    information. <em>Note that the multithreaded capabilities have not yet been tested very much and probably aren't
 
456
    very stable.</em></li>
 
457
 
 
458
    <li>Added <code>PYRO_MULTITHREADED</code> config item to specify whether a Pyro server should be multithreaded or
 
459
    single threaded. It defaults to 1 (multithreaded) on systems that support this.</li>
 
460
 
 
461
    <li>Fixed a socket bind() error in the NS; it now correctly pays attention to a supplied specific hostname to bind
 
462
    the server on (the BroadcastServer still used to bind on <code>''</code> - fixed).</li>
 
463
 
 
464
    <li>Removed a socket bind() call from the <code>NameServerLocator</code>.</li>
 
465
 
 
466
    <li>Fixed small typo in <code>xnsc</code>: the port number of the NS is now correctly displayed.</li>
 
467
 
 
468
    <li>Added &quot;quickstart&quot; example that uses John Wiegley's <code>remote.py</code> module.
 
469
        It makes using Pyro extremely easy: look at the client and server code!</li>
 
470
 
 
471
    <li>Added &quot;multithread&quot; example that shows the need of a multithreaded server (as supported
 
472
        since this release).</li>
 
473
 
 
474
    <li>Added <code>__copy__</code> method to the proxy code, which creates a local copy of a proxy object (with a new
 
475
    connection to the remote object).</li>
 
476
 
 
477
    <li>Fixed bind() and connect() calls in <code>protocol.py</code> to be compatible with Python 1.6.</li>
 
478
 
 
479
    <li>Fixed possible socket binding error in Pyro servers by setting socket option to reuse local address.</li>
 
480
 
 
481
    <li>Fixed problem with binary GUID: <code>int2binstr</code> could return a string with less bytes than expected
 
482
    which creates an invalid binary GUID. The code now passes a required string size and the GUID is now always 4*4
 
483
    bytes.</li>
 
484
 
 
485
    <li>Fixed bugs that prevented the use of AttrProxies with delegated objects. You can now use direct attribute
 
486
    access with objects subclassed from ObjBase or delegated objects.</li>
 
487
  </ul>
 
488
 
 
489
  <h3>Pyro 1.5</h3>
 
490
 
 
491
  <ul>
 
492
    <li>Fixed multithreading issues, most notably the protocol errors (&quot;invalid header&quot;). (An incoming
 
493
        request is now fully read from the socket before a thread is dispatched to process the method
 
494
        call).</li>
 
495
 
 
496
    <li>Protocol update. You must update all Pyro installations because the new PYRO protocol is incompatible with the
 
497
    previous one.</li>
 
498
 
 
499
    <li>PYRO protocol can now compress the messages to save bandwidth, for instance over low-speed connections such as
 
500
    modem. You can control this with the new configuration item <code>PYRO_COMPRESSION</code>. However, the current
 
501
    solution is temporary and is likely to be replaced with a more general implementation. The <code>zlib</code> module
 
502
    is used for compression. If you don't have <code>zlib</code>, Pyro still works, but without compression.</li>
 
503
 
 
504
    <li>Fixed a reference cycle in ObjBase when not using delegate.</li>
 
505
 
 
506
    <li>Small change to examples/quickstart: existing name is silently overwritten in Name Server.</li>
 
507
 
 
508
    <li>Small change in <code>Pyro_dyncall</code> method of <code>ObjBase</code> that makes it a little more generic
 
509
    when checking for 'local' attributes.</li>
 
510
 
 
511
    <li>Small change in error message for INVALID HEADER in protocol.py, now prints socket address.</li>
 
512
 
 
513
    <li>Xnsc tool is now a bit wider so more text fit in the window without wrapping.</li>
 
514
 
 
515
    <li>Removed <code>__call__</code> method from <code>DynamicProxy</code>. I assume nobody ever used the only benefit
 
516
    it provided (that <code>proxy('method')</code> was slightly faster than <code>proxy.method()</code>).</li>
 
517
 
 
518
    <li>Configuration files are handled a little different at startup. If you don't specify a specific config file with
 
519
    the environment setting, Pyro checks for a <code>Pyro.conf</code> file in the current directory. If it exists, Pyro
 
520
    uses it as a configuration file. If it doesn't exist, Pyro uses the default built-in config. Furthermore, Pyro now
 
521
    raises a PyroError if somehow a config file can't be read.</li>
 
522
 
 
523
    <li>Daemon prints a more verbose error message if it can't start.</li>
 
524
 
 
525
    <li>Pyro server now raises a PyroError if it can't load the Python module that is needed for the code of objects
 
526
    that were passed in a remote call.</li>
 
527
 
 
528
    <li>&quot;quickstart&quot; example has been extended. New version of <code>remote.py</code> and a
 
529
        very convenient
 
530
    <code>pyrorun</code> script. (John Wiegley)</li>
 
531
 
 
532
    <li>Mobile agent example added; &quot;agent&quot; (it comes close but it is not yet a real mobile agent
 
533
        - the code doesn't yet travel across the network)</li>
 
534
 
 
535
    <li>Small documentation updates and fixes.</li>
 
536
  </ul>
 
537
 
 
538
  <h3>Pyro 2.0</h3>
 
539
 
 
540
  <ul>
 
541
    <li>NEW MAJOR VERSION. Because of all new features mentioned below.</li>
 
542
 
 
543
    <li>True mobile agent support! Pyro can now automatically push Python code across the network to
 
544
        make mobile agents possible. See the &quot;agent2&quot; example.</li>
 
545
 
 
546
    <li>Persistent Naming Service. See relevant documentation! (the new name server chapter)</li>
 
547
 
 
548
    <li>Added <code>rns</code> script; this script restarts the NS automatically after a shutdown or crash.</li>
 
549
 
 
550
    <li>Documentation updates (examples + new name server chapter + feature chapter contains much more info).</li>
 
551
 
 
552
    <li>Changed old persistence code in <code>core.py</code>.</li>
 
553
 
 
554
    <li>Added <code>PersistentNameServer</code> class in <code>naming.py</code>, which implements a NameServer that
 
555
    uses the hierarchical file system on your disk to store its database in a persistent way.</li>
 
556
 
 
557
    <li>NameServer now always returns <code>PyroURI</code> instances from <code>resolve</code>. In the past it could
 
558
    also return URIs as strings.</li>
 
559
 
 
560
    <li>It's no longer possible to delete the root group from the NS.</li>
 
561
 
 
562
    <li>Removed Python 1.5.1 workarounds ('extra' dir with socketserver module, abspath workaround in config module).
 
563
    Please upgrade to at least Python 1.5.2.</li>
 
564
 
 
565
    <li>Socket code no longer throws <code>socket.error</code> but <code>Pyro.errors.SocketClosedError</code>
 
566
    exceptions.</li>
 
567
 
 
568
    <li><code>PYROAdapter</code> has new <code>rebindURI</code> method to support the new auto reconnect/rebind feature
 
569
    when a network problem occurs.</li>
 
570
 
 
571
    <li><code>PYROAdapter</code> now raises a <code>ProtocolError</code> when it receives a request for an unknown
 
572
    object ID.</li>
 
573
 
 
574
    <li><code>ServerFullError</code> exception has been removed!!! You must change your code that used it. It has been
 
575
    replaced by a more general <code>ConnectionDeniedError</code> exception.</li>
 
576
 
 
577
    <li>Generalized new connections check: the daemon now has a <em>new connections validator</em>, which can be
 
578
    replaced by a custom version. The default version implements the old behaviour; checking if the number of
 
579
    connections is less than the maximum amount configured in PYRO_MAXCONNECTIONS. See relevant documentation about the
 
580
    validator.</li>
 
581
 
 
582
    <li>Added &quot;denyhosts&quot; example to show custom connection validator feature.</li>
 
583
 
 
584
    <li>Added &quot;autoreconnect&quot; example to show auto reconnect feature.</li>
 
585
 
 
586
    <li>Name Server now has security plugins; one for validating broadcast requests, and one new connection validator
 
587
    as described above. See relevant docs.</li>
 
588
 
 
589
    <li>Added &quot;NS_sec_plugins&quot; example to show the NS security plugin feature.</li>
 
590
 
 
591
    <li>Added &quot;agent2&quot; example with true mobile agent code.</li>
 
592
 
 
593
    <li>Added <code>PYRO_MOBILE_CODE</code> config item to enable mobile code.</li>
 
594
 
 
595
    <li>Added <code>PYRO_DNS_URI</code> config item to use symbolic DNS hostnames in URIs instead of fixed IP
 
596
    addresses</li>
 
597
 
 
598
    <li>Added support for mobile code in <code>Pyro.core.ObjBase</code>.</li>
 
599
 
 
600
    <li>Performance tuning in <code>core.py</code>; PROTOCOL IS INCOMPATIBLE with previous version.</li>
 
601
 
 
602
    <li>Slight addition to <code>Pyro.core.Daemon</code>: extra <code>publishhost</code> argument to use in case of
 
603
    firewall situation. See Features chapter.</li>
 
604
  </ul>
 
605
 
 
606
  <h3>Pyro 2.1</h3>
 
607
 
 
608
  <ul>
 
609
    <li>Pyro is now under the GNU LGPL. See &quot;LICENSE&quot;.</li>
 
610
 
 
611
    <li>Fixed spelling errors in the documentation.</li>
 
612
 
 
613
    <li>Removed some config items to make things less complex. You have to remove them from your Pyro.conf files
 
614
    too:</li>
 
615
 
 
616
    <li>Removed config item <code>PYRO_NS_NAME</code>; it is now hardcoded and available (if needed) as
 
617
    <code>Pyro.naming.NS_NAME</code>.</li>
 
618
 
 
619
    <li>Removed config item <code>PYRO_NS_GROUPSEP</code>; it's now hardcoded as '.'.</li>
 
620
 
 
621
    <li>Removed config item <code>PYRO_NS_ROOTCHAR</code>; it's now hardcoded as ':'.</li>
 
622
 
 
623
    <li>Added the Event Service (<code>Pyro.EventService.*</code>). See the chapter on Pyro Services.
 
624
        There is an example too: &quot;stockquotes&quot;.</li>
 
625
 
 
626
    <li>Fixed the &quot;naming&quot; example.</li>
 
627
 
 
628
    <li>Translated the TODO list from Dutch to English, so everybody can read it now.</li>
 
629
 
 
630
    <li>Enhanced <code>DynamicProxy</code>; it can now be used as a key in a dictionary. This was needed for the Event
 
631
    Servive.</li>
 
632
  </ul>
 
633
 
 
634
  <h3>Pyro 2.2</h3>
 
635
 
 
636
  <ul>
 
637
    <li>GUIDs are now constructed using the Python process ID (PID) too. This gives extra safety against double GUIDs
 
638
    possibly generated by multiple python processes on the same machine.</li>
 
639
 
 
640
    <li>Renamed <code>SocketClosedException</code> to <code>ConnectionClosedException</code>. The new name is more
 
641
    independent of the actual implementation.</li>
 
642
 
 
643
    <li>Removed some references to the <code>socket</code> module and <code>socket.error</code>. This makes the rest of
 
644
    the code more independent of the actual protocol implementation. A future Pyro release may contain even more
 
645
    changes to fully support multiple protocol implementations (not only sockets).</li>
 
646
 
 
647
    <li>Documented the <code>pickle</code> trojan vulnerability in the 'Features and Guidelines' chapter.</li>
 
648
 
 
649
    <li>Included setup script by Alexandre Fayolle.</li>
 
650
  </ul>
 
651
 
 
652
  <h3>Pyro 2.3</h3>
 
653
 
 
654
  <ul>
 
655
    <li>Pyro now requires at least Python 2.0.1, but Python 2.1.1 or later is recommended. Anything older than Python
 
656
    2.0.1 is no longer supported.</li>
 
657
 
 
658
    <li>Added <code>PYRO_NS_HOSTNAME</code> config item, for direct hostname lookup when the NS can't be found using
 
659
    broadcast.</li>
 
660
 
 
661
    <li>Documentation and examples changed to reflect the above enhancement.</li>
 
662
 
 
663
    <li>Grand renaming: Naming Service is now called Name Server everywhere. Event Service stays.</li>
 
664
 
 
665
    <li>Logger now uses YYYY-MM-DD hh:mm:ss date/time format.</li>
 
666
 
 
667
    <li>Event Service improved, but it now requires threads to work. Major problems have been fixed regarding
 
668
    re-subscribing and unsubscribing while processing events.</li>
 
669
 
 
670
    <li>Improved rich comparison and hashing of proxies. They can now be a key in a dictionary, and proxies that refer
 
671
    to the same object GUID, compare the same. Sadly, this largely breaks the hashing and rich comparison possibility
 
672
    of the remote Pyro objects. You're not comparing those objects, you're comparing the proxies... The hashing and
 
673
    rich comparison didn't work for remote objects in Pyro 2.2 too (same reasons) so this is not too bad.</li>
 
674
 
 
675
    <li>Dramatically improved the speed when sending <strong>large</strong> messages: the sock_recv code now uses a
 
676
    list of chunks and joins them at the end, instead of string concatenation. You will see the difference in the
 
677
    hugetransfer example: the message size has been increased tenfold, but the time it takes is almost unchanged
 
678
    :-)</li>
 
679
  </ul>
 
680
 
 
681
  <h3>Pyro 2.4</h3>
 
682
 
 
683
  <ul>
 
684
    <li>Preliminary Jython support, workarounds/hacks to fill in for missing features such as <code>select</code>,
 
685
    <code>errno</code> and <code>getpid</code>. <em>Only PYRO clients in Jython currently, because servers need
 
686
    <code>select</code>!</em></li>
 
687
 
 
688
    <li>Fixed docs about removed config items in Pyro 2.1</li>
 
689
 
 
690
    <li>Fixed time format string in logger, now the loggings includes the time again on Windows</li>
 
691
 
 
692
    <li>Fixed indentation errors in quickstart example's <code>remote.py</code> and it should work again on Windows
 
693
    (signals).</li>
 
694
 
 
695
    <li>Fixed the log file configuration options, they now work as documented. When changing <code>PYRO_LOGFILE</code>
 
696
    or <code>PYRO_USER_LOGFILE</code>, all following log messages are written to the new location. If the filename
 
697
    isn't an absolute path, it will be made relative to the current <code>PYRO_STORAGE</code> location.</li>
 
698
 
 
699
    <li>Slightly clearified the docs on the <code>PYRO_STORAGE</code> config item.</li>
 
700
 
 
701
    <li>Updated the example chapter to use Pyro 2.4.</li>
 
702
 
 
703
    <li>One additional small change to the proxy code: <code>__nonzero__</code> has been defined in the proxy.</li>
 
704
 
 
705
    <li>Pyroc now also generates proxy code with the various comparison and hashing functions.</li>
 
706
 
 
707
    <li>Oneway invocations support added. See the chapter on features and guidelines.</li>
 
708
 
 
709
    <li>New event service example &quot;countingcars&quot; that shows a client that changes its topic subscriptions.</li>
 
710
 
 
711
    <li>New &quot;callback&quot; example that shows callback invocations to clients and the new Oneway call.</li>
 
712
 
 
713
    <li>Event service now sets correct (publish) timestamps on events, also with slow clients.</li>
 
714
 
 
715
    <li>Event service uses oneway invocations to publish the events and to decouple from slow or buggy clients. They no
 
716
    longer stall the publication thread in the ES.</li>
 
717
 
 
718
    <li>Documentation updates on the new features.</li>
 
719
  </ul>
 
720
 
 
721
  <h3>Pyro 2.5</h3>
 
722
 
 
723
  <ul>
 
724
    <li>Slight change in names in the example chapter to avoid ambiguity between 'test' object and 'test' module.</li>
 
725
 
 
726
    <li>Rewrote PYRO_STORAGE directory checking to something much simpler. Should work on all platforms now.</li>
 
727
 
 
728
    <li>Navbar also at bottom of documentation pages for easier navigation.</li>
 
729
 
 
730
    <li>New config option <code>PYRO_CHECKSUM</code> to enable a quick Adler32 checksum on the messages. (Why Adler32
 
731
    and not CRC32? Adler is faster, and we need speed).</li>
 
732
 
 
733
    <li>Now using regular expression to parse Pyro URI strings.</li>
 
734
 
 
735
    <li>New URI <code>PYRONAME://nshostname:port/objectname</code> for <em>very</em> easy automatic object lookup.
 
736
    nshostname and port are optional.</li>
 
737
 
 
738
    <li>New URI <code>PYROLOC://hostname:port/objectname</code> for <em>very</em> easy object binding without using a
 
739
    Name Server. port is optional.</li>
 
740
 
 
741
    <li>The Pyro Daemon itself is now a Pyro object too. This was needed for the PYROLOC: resolving, but it might prove
 
742
    valuable too in a later version when you might want to access it to get information on server objects, for
 
743
    instance. The Daemon has a fixed builtin GUID, <code>Pyro.core.INTERNAL_DAEMON_GUID</code>. I'm not sure if this
 
744
    feature stays, because it might also be a huge security/stability hole. (please advise?)</li>
 
745
 
 
746
    <li>Improved documentation here and there.</li>
 
747
 
 
748
    <li>The setup.py script no longer overwrites system tools blindly, it warns you of this issue and it asks you to
 
749
    specify the path were the Pyro scripts have to be installed.</li>
 
750
  </ul>
 
751
 
 
752
  <h3>Pyro 2.6</h3>
 
753
 
 
754
  <ul>
 
755
    <li>Fixed mobile code (agents). Internal exception caused socket to shutdown, causing connection lost error.</li>
 
756
 
 
757
    <li>Minor changes to the docs, documented the mobile code module restriction, a bit more details on auto
 
758
    rebind.</li>
 
759
 
 
760
    <li>Fixes to some small and a few nasty bugs that had crept in. Some bugs detected by pychecker, yay</li>
 
761
 
 
762
    <li>Moved constants to new module <code>Pyro.constants</code> to avoid import conflicts.</li>
 
763
 
 
764
    <li>Renamed and moved the internal Pyro names: <code>Pyro.constants.NAMESERVER_NAME</code> and
 
765
    <code>Pyro.constants.EVENTSERVER_NAME</code>. (previously <code>NS_NAME</code> and
 
766
    <code>EVENTSERVICE_NAME</code>)</li>
 
767
 
 
768
    <li>Fixed <code>StringTypes</code> that was a Python 2.2 dependency.</li>
 
769
 
 
770
    <li>Event Server clients will now correctly terminate (the request loop no longer hangs)</li>
 
771
  </ul>
 
772
 
 
773
  <h3>Pyro 2.7</h3>
 
774
 
 
775
  <ul>
 
776
    <li>Pyro is close to a major new release (3.0). It appears that 2.x has no more big issues.</li>
 
777
 
 
778
    <li>Mobile code improved: can now transmit modules from packages! Agent2 example changed to reflect this.</li>
 
779
 
 
780
    <li>Added two more examples: chatbox with and without using the Event Server.</li>
 
781
 
 
782
    <li>Finally documented the Name Server Pyro object methods.</li>
 
783
 
 
784
    <li>Minor other changes and additions to the docs.</li>
 
785
 
 
786
    <li>Fixed some leaks when handling exception tracebacks.</li>
 
787
 
 
788
    <li>Added logic to transfer remote exception tracebacks to clients and to print them on the client. See
 
789
    <code>Pyro.util.getPyroTraceback</code>.</li>
 
790
 
 
791
    <li>The <code>NameServerLocator</code> no longer performs a broadcast lookup if the hostname is specified in the
 
792
    <code>getNS</code> call, or if the <code>PYRO_NS_HOSTNAME</code> config item is specified.</li>
 
793
 
 
794
    <li>Added host and port options to Event Server start script.</li>
 
795
 
 
796
    <li>Event Server now has nice error handling and cleanup, like the Name Server.</li>
 
797
 
 
798
    <li>No longer does SO_REUSEADDR on sockets when running under Windows, because Windows has a quirk with this that
 
799
    allows multiple processes to listen on the same socket.</li>
 
800
  </ul>
 
801
 
 
802
  <h3>Pyro 2.8</h3>
 
803
 
 
804
  <ul>
 
805
    <li>Fixed import Pyro.protocol error by moving RIF_* flags to constants module.</li>
 
806
 
 
807
    <li>Completed chapter 6 - implementation. Not as much info as I would like, but it's enough to get a quick idea of
 
808
    how Pyro's implemented.</li>
 
809
 
 
810
    <li>Compressed the example chapter to make it easier to understand.</li>
 
811
 
 
812
    <li>Changed preferred way of dealing with the daemon's request loop to <code>requestLoop</code>, instead of
 
813
    <code>handleRequests</code> (Don't worry, the latter still exists!). Updated most examples.</li>
 
814
 
 
815
    <li>Fixed ^C handling of chatbox examples.</li>
 
816
 
 
817
    <li>Fixed bug when both compression and checksumming were enabled.</li>
 
818
 
 
819
    <li>Setup script should work again under Win98, also, entering no path for the location for the script files takes
 
820
    the distutils default path.</li>
 
821
 
 
822
    <li>Fixed old bug in pyroc generated proxy code (method names for remote attribute access were wrong)</li>
 
823
 
 
824
    <li>Added agent docs on module dependencies: imports of other unknown modules don't work in agents.</li>
 
825
  </ul>
 
826
  
 
827
  <h3>Pyro 3.0</h3>
 
828
 
 
829
  <ul>
 
830
    <li>Major new version! Not compatible with older versions!</li>
 
831
 
 
832
    <li>Pyro is now under the MIT software license. This license is much easier and less restrictive
 
833
        than the previous (GNU LGPL). Please read the file &quot;LICENSE&quot;!</li>
 
834
 
 
835
    <li>Major speedup, up to <em>twice</em> as fast as before! (Thanks to new threading code) This makes Pyro in
 
836
    multithreaded mode as fast as singlethreaded mode :-)</li>
 
837
 
 
838
    <li>Removed last traces of sockets in <code>core.py</code>. It only works with the more abstract
 
839
    <em>connection</em> objects.</li>
 
840
 
 
841
    <li>Added SSL support (based on a patch by Holger Br&uuml;ckner, thanks!). Requires <em>M2Crypto</em> module.</li>
 
842
 
 
843
    <li>Simplified objectID encoding, now uses hexlified guids everywhere. No more converting from/to binary
 
844
    strings.</li>
 
845
 
 
846
    <li>Changed threading in protocol.py: Pyro used to hang when bad clients connected but didn't write their full
 
847
    message on the socket. Now Pyro splits off a new thread <em>directly</em>, as soon as it detected a new connection
 
848
    or request.</li>
 
849
 
 
850
    <li>Pyro no longer spawns a new thread for each request. Instead, it spawns a single thread for each
 
851
    <em>connection</em>, and hands control to that thread. The thread processes requests sequentially, and dies when
 
852
    the connection closes. This causes a major speedup when processing lots of small requests.</li>
 
853
 
 
854
    <li>Fixed some obscure potential socket/threading bugs and made protocol version mismatch handling slightly
 
855
    better.</li>
 
856
 
 
857
    <li>Connection denied reasons added to constants.py</li>
 
858
 
 
859
    <li>Fixed cpu-bound server in multithreading example</li>
 
860
 
 
861
    <li>Implemented XML pickling support using Gnosis_Utils' xml pickle, PYRO_XML_PICKLE config item to select it.
 
862
    Server automatically answers in correct pickle format.</li>
 
863
 
 
864
    <li>No longer dumps config twice when program uses both init client and init server.</li>
 
865
 
 
866
    <li>Fixed some cyclic references. Object-daemon reference is now a weak reference if available (Python 2.1+).
 
867
    Daemon/tcpserver now appears to clean up nicely.</li>
 
868
 
 
869
    <li>Added some extra cleanup methods to nicely close socket connections.</li>
 
870
 
 
871
    <li>Authenticated connection validation. You can now require the Pyro client to give a valid authentication
 
872
        ID (password) while connecting. Control this using the improved connection validator. Not used
 
873
        by default, so old code still works without authentication. See the &quot;NS_sec_plugins&quot; example.</li>
 
874
 
 
875
    <li>Configurable timeouts on sending and receiving of messages. Due to changed connection procedure, this also
 
876
    works for new connections. So Pyro can now also timeout when a new client just connects and blocks without sending
 
877
    anything (the port is not occupied forever).</li>
 
878
 
 
879
    <li>Added a new chapter about security to the manual.</li>
 
880
 
 
881
    <li>The Daemon is no longer <em>directly</em> remotely accessible. Instead, there is now a DaemonServant object
 
882
    with a limited interface that is the actual Pyro object and that calls the daemon.</li>
 
883
 
 
884
    <li>PyroURI objects have two new methods to directly get a proxy from an URI object: <code>getProxy</code> and
 
885
    <code>getAttrProxy</code>.</li>
 
886
 
 
887
    <li>Proxies can now be 'passivated' if they are not needed for a while (they release their network connection)
 
888
    <code>proxy._release()</code></li>
 
889
 
 
890
    <li>Transient server objects can be automatically cleaned up after a specified period of inactivity.
 
891
    <code>daemon.setTransientsCleanupAge(timeout)</code> Also added this to the Bank2 example, so have a look
 
892
    there.</li>
 
893
 
 
894
    <li>Mobile agents can now import other modules that don't already exist on the server! (But only from within the
 
895
    agent class methods, not from within the defining module scope) They will also be loaded from the client, if the
 
896
    codeValidator allows this.</li>
 
897
 
 
898
    <li>Special base class for callback objects; <code>CallbackObjBase</code>. It will raise local exceptions also, not
 
899
    only silently passing them back to the server.</li>
 
900
 
 
901
    <li>Can now create <code>PyroURI</code> instances from PYROLOC: and PYRONAME: uris. The instance will be the actual
 
902
    URI, after performing the lookup. Not very useful actually, because we used to do the equivalent
 
903
    <code>proxy=Pyro.core.getProxyForURI('PYRONAME://.......')</code> Now you can also do
 
904
    <code>proxy=Pyro.core.PyroURI('PYRONAME://.......').getProxy()</code></li>
 
905
 
 
906
    <li>Added two minimalist examples in the manual, to show how easy Pyro is :-)</li>
 
907
 
 
908
    <li>Name Server, Logger and listdir are now thread-safe (oops, they weren't before).</li>
 
909
 
 
910
    <li>Event Server no longer requires threads, checks if it is already running, and has new '-i' command line option
 
911
    to specify the required authentication passphrase.</li>
 
912
 
 
913
    <li>Name Server checks at startup if it is not already running in the network segment. Unless you use the new '-m'
 
914
    command line option, it refuses to start if another NS is detected.</li>
 
915
 
 
916
    <li>Name Server has new '-i' command line option to specify the required authentication passphrase.</li>
 
917
 
 
918
    <li>setup.py script can now be run unattended (for automated installs) by editing setup.cfg</li>
 
919
 
 
920
    <li>Added stresstest example (stresses the Name Server and the Event Server). Good for stability check.</li>
 
921
 
 
922
    <li>Pyro objects can now access Thread Local Storage by calling <code>self.getLocalStorage()</code>. This is an
 
923
    empty class to store your stuff into. It has one attribute, <code>caller</code>, that is the TCPConnection of the
 
924
    calling object.</li>
 
925
 
 
926
    <li>Renamed &quot;Mobile Agent&quot; to &quot;Mobile Object&quot; where appropriate. Mobile Agents are
 
927
        a special kind of Agent, and an Agent is a very special piece of software, and most mobile code
 
928
        that we're talking about isn't an agent.</li>
 
929
 
 
930
    <li>Added process ID and thread name info to logging messages.</li>
 
931
 
 
932
    <li>Fixed setup script, creation of RPM should now work (python setup.py bdist_rpm).</li>
 
933
 
 
934
    <li>Added &quot;circle&quot; example to show circular calling patterns.</li>
 
935
 
 
936
    <li>Added &quot;quickstart-noNS&quot; example, like the &quot;quickstart&quot; example but this one doesn't
 
937
        use the NS.</li>
 
938
 
 
939
    <li>Improved &quot;callback&quot; example and documentation about Callbacks.</li>
 
940
 
 
941
    <li>Promoted <code>remote.py</code> and <code>remote_nons.py</code> (from the &quot;quickstart[-noNS]&quot;
 
942
        examples) into the Pyro library: there is a new package <code>Pyro.ext</code> that contains them.
 
943
        They still have to be documented in this manual though.</li>
 
944
 
 
945
    <li><code>PyroURI</code> objects are now correctly hashable, so you can use them as keys in dictionaries. The
 
946
    uniqueness is determined by the string representation of the oject.</li>
 
947
 
 
948
    <li>Documented the fact that <code>MyObject.attribute.subattribute</code> won't work in some cases, and extended
 
949
    the attributes example a bit.</li>
 
950
 
 
951
    <li>Fixed problem with deleting DynamicProxy in case of invalid URI.</li>
 
952
 
 
953
    <li>More troubleshooting tips added.</li>
 
954
 
 
955
    <li>Documented deadlock with object conversation problem (in Features chapter).</li>
 
956
 
 
957
    <li>When mobile code is not enabled, the remote invocation doesn't use the import wrapper class (5% speed
 
958
    improvement)</li>
 
959
 
 
960
    <li>Fixed shell scripts to allow quoted arguments such as: ns -i &quot;the id string&quot;</li>
 
961
 
 
962
    <li>URI parsing is stricter (could get in loop with certain invalid URI strings)</li>
 
963
  </ul>
 
964
 
 
965
  <h3><a>Pyro 3.1</a></h3>
 
966
 
 
967
  <ul>
 
968
    <li>Finally fixed the Event Server crash problem with the &quot;stresstest&quot; example; the ES now uses
 
969
        worker threads and Queues per subscriber.</li>
 
970
 
 
971
    <li>Two new config items for the ES: <code>PYRO_ES_QUEUESIZE</code> and <code>PYRO_ES_BLOCKQUEUE</code>.</li>
 
972
 
 
973
    <li>Small fix in installation docs about where to put the module files.</li>
 
974
 
 
975
    <li>Documented the fact that proxies can be pickled when not connected, and added _release method to
 
976
    NameServerProxy.</li>
 
977
 
 
978
    <li>Documented the serious 'local object' issue with nested attribute access, in the Features chapter.</li>
 
979
 
 
980
    <li>Support added for PyXML's xml-pickler. Config item <code>PYRO_XML_PICKLE</code> changed: now chooses what
 
981
    implementation is wanted.</li>
 
982
 
 
983
    <li>Docs now contain links where referred to other parts of the docs. Various other documentation fixes.</li>
 
984
 
 
985
    <li>ns script now has '-v' option to enable verbose output. Normal output is slightly more compact.</li>
 
986
 
 
987
    <li>Proxy objects are now automatically pickleable, no need to call <code>_release()</code> first.</li>
 
988
 
 
989
    <li>New <code>SynchronizedObjBase</code> base class which provides threadsafe method calls (every method call is
 
990
    synchronized on the object).</li>
 
991
 
 
992
    <li>Fixes for <code>CallbackObjBase</code> error reporting, added another callback example for this.</li>
 
993
 
 
994
    <li><code>CallbackObjBase</code> is better documented.</li>
 
995
  </ul>
 
996
 
 
997
  <h3><a>Pyro 3.2</a></h3>
 
998
 
 
999
  <ul>
 
1000
    <li>Big improvements in the mobile code department, thanks to Ulrich Eck:
 
1001
 
 
1002
      <ul>
 
1003
        <li>2-way mobile code now possible! Client can transparantly download missing code from the server, no longer
 
1004
        only upload it to the server!</li>
 
1005
 
 
1006
        <li>CodeValidators now work for both up- and downloaded code.</li>
 
1007
 
 
1008
        <li>Remote code downloading from server is also recursive. <em>watch out! there are no sanity checks
 
1009
        yet.</em></li>
 
1010
 
 
1011
        <li>downloaded modules no longer overwrite existing modules</li>
 
1012
 
 
1013
        <li>Updated the &quot;agent2&quot; shopping example to use 2-way mobile code.</li>
 
1014
      </ul>
 
1015
    </li>
 
1016
 
 
1017
    <li>Big improvements in the connection validation logic, thanks to Luis Caamano and Scott Leerssen: The connection
 
1018
    validation logic has been condensed in a single class (<code>DefaultConnValidator</code>). It is now much more
 
1019
    flexible. By providing a specialized ConnValidator object you can now completely control the logic that Pyro uses
 
1020
    on both client-side and server-side to authenticate new client connections. The change is backwards-compatible and
 
1021
    the default implementation still uses the md5 hashing of identification phrases for authentication.</li>
 
1022
 
 
1023
    <li>Added a WXPython GUI name server control utility: wxnsc.py, and a batch file wxnsc. Thanks to Jan Finell for
 
1024
    this nice GUI tool with a tree view of the namespace.</li>
 
1025
 
 
1026
    <li>Fixed some path issues (mac) in the setup.py script.</li>
 
1027
 
 
1028
    <li>Fixed some Python 2.1 incompatibilities that had crept in (foo in dict instead of foo in dict.keys())</li>
 
1029
 
 
1030
    <li>NS broadcast server now binds on '' on Windows. '&lt;broadcast&gt;' doesn't work on Windows (???)</li>
 
1031
 
 
1032
    <li>Disconnecting objects from a Daemon no longer crashes when no NS is used.</li>
 
1033
 
 
1034
    <li>Scripts changed to pass correct sys.argv arguments to actual Python modules. Ugly '-c' argument removal code is
 
1035
    gone.</li>
 
1036
 
 
1037
    <li>Daemon now tests if your hostname is valid and doesn't resolve to the loopback address 127.0.0.1 (which is
 
1038
    often invalid). A warning message is logged in that case. NS and ES also print the message on the screen at
 
1039
    startup. The test is done in the <code>validateHostnameAndIP</code> method of the Daemon.</li>
 
1040
 
 
1041
    <li>Name Server now also accepts non-absolute names and does the expansion itself, if needed. This enables
 
1042
    simplified access to the NS trough other means than the default static proxy obtained from the locator. (suggested
 
1043
    by Luis P Caamano).</li>
 
1044
 
 
1045
    <li>Replaced to-be-deprecated <code>apply</code> with <code>func(*args)</code> syntax. Small speed increase
 
1046
    too.</li>
 
1047
 
 
1048
    <li>NS no longer logs error when detecting duplicate NS.</li>
 
1049
 
 
1050
    <li>Added Windows NT Services to Pyro (run NS / ES as NT service). Including batch files <code>nssvc.bat</code> and
 
1051
    <code>essvc.bat</code> to install/remove them.</li>
 
1052
 
 
1053
    <li>Added Unix daemons to Pyro (run NS / ES as initd daemon). Including batch files <code>nsd</code> and
 
1054
    <code>esd</code> to run them from init scripts.</li>
 
1055
 
 
1056
    <li>Relocated Event Server chapter in the manual after the Name Server.</li>
 
1057
 
 
1058
    <li>Fixed race condition in dir check in configuration.py</li>
 
1059
 
 
1060
    <li>Fixed race condition in _grimReaper in core.py</li>
 
1061
 
 
1062
    <li>Fixed mobile code load/compile issue on windows. Pyro now supplies .pyo, .pyc, .py in that order. On Windows,
 
1063
    Python can't compile downloaded .py files if they have CR LF in them... :-(</li>
 
1064
 
 
1065
    <li>A few Jython compatibility improvements (GUID, config init).</li>
 
1066
 
 
1067
    <li>Fixed maxclient example and ConnectionDeniedError for maxclients.</li>
 
1068
 
 
1069
    <li>Thread Local Storage has been improved (docs + added initTLS in Daemon)</li>
 
1070
  </ul>
 
1071
 
 
1072
  <h3><a>Pyro 3.3</a></h3>
 
1073
 
 
1074
  <ul>
 
1075
    <li>The NS tries &quot;&lt;broadcast&gt;&quot; first, this fails on some systems (windows) but it
 
1076
        now automatically tries &quot;&quot;
 
1077
    next (which should work).</li>
 
1078
 
 
1079
    <li>Pyro now enforces you to initialize it correctly by calling <code>Pyro.core.initClient()</code> or
 
1080
    <code>initServer()</code>. Failure to do so will result in a <code>PyroError</code> very soon.</li>
 
1081
 
 
1082
    <li>Name Server now has <em>Paired Mode</em>: run two NS instances that synchronize with eachother. Use for
 
1083
    fail-over.</li>
 
1084
 
 
1085
    <li>nsc tools have new options to deal with new NS features (meta info, paired NS).</li>
 
1086
 
 
1087
    <li>Name Server lookups automatically try to use the second NS if the first is unreachable.</li>
 
1088
 
 
1089
    <li>NS proxy automatically tries to find the NS again (or its twin) when the connection has been lost.</li>
 
1090
 
 
1091
    <li>Three new config items for the paired-NS mode: PYRO_NS2_* (see configuration chapter).</li>
 
1092
 
 
1093
    <li>NS ports slightly changed: NS now uses 9090 TCP and 9090 UDP by default (was: 9090 TCP and 9091 UDP). The
 
1094
    second -paired- NS uses 9091 TCP and 9091 UDP.</li>
 
1095
 
 
1096
    <li>You can now run clients on read-only systems: <code>PYRO_STORAGE</code> is no longer created and checked for
 
1097
    access when initializing <em>clients</em>. When you're initializing a <em>server</em>, it is still checked, unless
 
1098
    you explicitly disable the check by setting the new optional argument <code>storageCheck</code> to zero:
 
1099
    <code>Pyro.core.initServer(storageCheck=0)</code>.</li>
 
1100
 
 
1101
    <li>More emphasis in the docs on the drawbacks of single-threading mode; you cannot use callbacks (Pyro will
 
1102
    freeze)</li>
 
1103
 
 
1104
    <li>Rewrote the Event Server chapter in the manual.</li>
 
1105
 
 
1106
    <li>objects connected using connectPersistent() are no longer removed from the NS when the Daemon is removed.</li>
 
1107
 
 
1108
    <li>Fixed bug in pickling of DynamicProxy (it didn't work in the regular pickle module, and Jython). Also, you can
 
1109
    now do this: <code>proxy.method(proxy)</code> i.e. pass the active proxy to a methodcall on itself. That didn't
 
1110
    work before.</li>
 
1111
 
 
1112
    <li>Passing DynamicProxies no longer cause the socket connection to be disconnected. So on a new method call on the
 
1113
    proxy that was passed, it is no longer needed to do a reconnect.</li>
 
1114
 
 
1115
    <li>Detailed tracebacks (with dump of the local variable's values) can now be enabled by setting
 
1116
    <code>PYRO_DETAILED_TRACEBACK</code> to 1. Contributed by Richard Emslie.</li>
 
1117
 
 
1118
    <li>Pyro now deals correctly with obsoleted string exceptions (raise &quot;blahblah&quot;). (jf Gosset)</li>
 
1119
 
 
1120
    <li>Pyro exceptions now also automatically print their remote traceback info because the <code>__str__</code>
 
1121
    method has been customized in the <code>PyroExceptionCapsule</code>. No longer necessary to use exception handlers
 
1122
    and call <code>getPyroTraceback</code>. Contributed by jf Gosset. This is turned off by default, turn it on by
 
1123
    setting <code>PYRO_PRINT_REMOTE_TRACEBACK</code> to 1.</li>
 
1124
 
 
1125
    <li>New-style logging using the <code>logging</code> module can be enabled with the use of two new config items
 
1126
    <code>PYRO_STDLOGGING</code> and <code>PYRO_STDLOGGING_CFGFILE</code>. The logging API is unchanged so old code
 
1127
    still runs. With an appropriate logging configuration file, it should be possible to log to any destination
 
1128
    (handler) that <code>logging</code> supports. This further enables clients (with logging!) on a read-only system:
 
1129
    just log to syslog or a socket, no need to write logfiles to the local disk.</li>
 
1130
 
 
1131
    <li>&quot;simple&quot; example is now completely standalone instead of using testclient/server.</li>
 
1132
 
 
1133
    <li>Objects in the Name Server can now have user-defined meta information attached to them.</li>
 
1134
 
 
1135
    <li><code>nsc</code> (and the others) can show the meta information.</li>
 
1136
 
 
1137
    <li>documented that the auth challenge string has to be exactly 16 bytes long, and Pyro now checks this.</li>
 
1138
 
 
1139
    <li>New config item PYRO_TCP_LISTEN_BACKLOG that specifies the socket listen backlog size (used to be a measly 5,
 
1140
    is now default 200).</li>
 
1141
 
 
1142
    <li>Reordered a bunch of try..finally regarding mutex locking/unlocking. Should better prevent possible
 
1143
    deadlocks.</li>
 
1144
 
 
1145
    <li>Added missing <code>__copy__</code> method to <code>DynamicProxyWithAttrs</code>. (This bug caused the Bank2
 
1146
    example to crash, for instance).</li>
 
1147
 
 
1148
    <li>Added stdin/stdout redirection to NUL for NT service in BasicNTService.py, thanks to David Rushby.</li>
 
1149
  </ul>
 
1150
 
 
1151
  <h3><a>Pyro 3.4</a></h3>
 
1152
 
 
1153
  <ul>
 
1154
    <li>Provided new SSL demo certificates, valid until january 2005. SSL example works again.</li>
 
1155
 
 
1156
    <li>Implemented PYROLOCSSL:// protocol which works just like the existing PYROLOC:// protocol, but uses SSL
 
1157
    instead. (compare with PYROSSL:// versus PYRO://). This means you can now use Pyro in SSL mode without using the
 
1158
    Name Server to look up objects. (PYROLOC didn't work over SSL)</li>
 
1159
 
 
1160
    <li>For Pyro clients, it is no longer required to explicitly call <code>Pyro.core.initClient()</code>. Pyro will do
 
1161
    this automatically if it is not yet initialised.</li>
 
1162
 
 
1163
    <li>For Pyro servers, it is no longer required to explicitly call <code>Pyro.core.initServer()</code> if you are
 
1164
    creating a Pyro Daemon as a first action. If you have not yet initialised Pyro explicitly, Pyro will do this for
 
1165
    you when you create a Pyro Daemon. If you do other Pyro operations before that, this will obviously not work.</li>
 
1166
 
 
1167
    <li>You can now configure command line arguments for the Windows NT services (essvc, nssvc) in the Registry. The
 
1168
    keys are: <code>HKLM\System\CurrentControlSet\Services\PyroES</code> and <code>...\PyroNS</code> . The value under
 
1169
    that key is: <code>PyroServiceArguments</code> (REG_SZ, it will be asked and created for you when doing a fresh
 
1170
    <code>nssvc remove</code> ... <code>nssvc install</code> ... <code>essvc remove</code> ... <code>essvc
 
1171
    install</code>.</li>
 
1172
 
 
1173
    <li>The win NT services (nssvc, essvc) now write their logging to a logfile in the root of your system
 
1174
        drive (usually C:\), named &quot;Pyro_NS_svc.log&quot; and &quot;Pyro_ES_svc.log&quot; .</li>
 
1175
 
 
1176
    <li>Documentation improvements about the Event Server.</li>
 
1177
 
 
1178
    <li>Documentation improvements about Connection Validators.</li>
 
1179
 
 
1180
    <li>Documentation added about nssvc and essvc NT-Service scripts for the NS and ES.</li>
 
1181
 
 
1182
    <li>Documentation HTML cleanups.</li>
 
1183
 
 
1184
    <li>Added a &quot;user_passwd_auth&quot; example that shows how to do connection validation (authentication)
 
1185
        based on username + password.</li>
 
1186
 
 
1187
    <li>Added a &quot;filetransfer&quot; example that shows how to do file transfers using Pyro.</li>
 
1188
 
 
1189
    <li>Added a &quot;rserve&quot; example that shows tuple-space like distributed communication. It can't
 
1190
        get simpler than this! Contributed by John Wiegley.</li>
 
1191
 
 
1192
    <li>New wxnsc.py that deals with meta info.</li>
 
1193
 
 
1194
    <li>Fixed daemonizer.py to <em>really</em> detach the daemon.</li>
 
1195
 
 
1196
    <li>Fixed socket buffer/memory problem in protocol.py socket recv code, that seems to occur in certain
 
1197
    situations.</li>
 
1198
 
 
1199
    <li>ResolvePYROLOC raises NamingError instead of KeyError if object name doesn't exist.</li>
 
1200
 
 
1201
    <li>Deamon now always prints and logs a warning if bound on localhost/127.0.0.1.</li>
 
1202
 
 
1203
    <li>Added a config item PYRO_SOCK_KEEPALIVE (default enabled) to control the SO_KEEPALIVE socket flag (to detect
 
1204
    broken connections).</li>
 
1205
 
 
1206
    <li>Changed config item PYRO_BINARY_PICKLE into PYRO_PICKLE_FORMAT, which defaults to the best pickle format
 
1207
    available. (on Python 2.3+ this is pickle.HIGHEST_PROTOCOL (2), otherwise it's 1). This means that on Python 2.3+
 
1208
    the new pickle format is automatically used that is much smaller and faster for new-style classes.</li>
 
1209
 
 
1210
    <li><code>Pyro.naming.NameServerStarter</code> now raises exceptions when it cannot start the name server.</li>
 
1211
 
 
1212
    <li><code>Pyro.naming.NameServerStarter</code> and <code>Pyro.EventService.Server.EventServiceStarter</code> now
 
1213
    have a threadsafe way to wait until the server has been started: call the <code>waitUntilStarted(timeout)</code>
 
1214
    method. This is used in the updated &quot;AllInOne&quot; example.</li>
 
1215
 
 
1216
    <li>Improved GUID generation a bit (threadsafe, tweaks).</li>
 
1217
 
 
1218
    <li>Fixed some issues with Pyro.conf config file.</li>
 
1219
 
 
1220
    <li>This is the last Pyro version that will work on Python 2.1, future versions require Python 2.2 or even
 
1221
    2.3.</li>
 
1222
  </ul>
 
1223
  
 
1224
  <div class="nav">
 
1225
  <hr>
 
1226
  <table width="100%">
 
1227
    <tr>
 
1228
      <td align="left"><a href="11-services.html">&lt;previous</a> | <a href="PyroManual.html">contents</a></td>
 
1229
 
 
1230
      <td align="right">Pyro Manual</td>
 
1231
    </tr>
 
1232
  </table></div>
 
1233
</body>
 
1234
</html>