source: trunk/CHANGES @ 306

Last change on this file since 306 was 306, checked in by bas, 10 years ago

made docdir configurable, closes #37

  • Property svn:keywords set to Id
File size: 22.8 KB
Line 
1=========== 4.4.0
2 * Drop support for versions older then 2.4
3 Author: Bas van der Vlies
4
5 * Added support for torque version >= 4.2
6 Author: Bas van der Vlies
7
8 * rewrote setup.py.in
9 Inspired by: stijn dot deweirdt at ugent dot be
10 Author: Bas van der Vlies
11
12 * docdir is now configurable, closes #37
13 Author: jens dot timmerman add ugent dot be
14 Applied by: Bas van der Vlies
15
16=========== 4.3.7
17 * pbs_jobmonitor/pbs_joblogin ported to torque 2.5 to fix jobarrays
18  Author: Willem Vermin (SURFsara)
19  Applied by: Bas van der Vlies
20 
21=========== 4.3.6
22 * Modified sara_nodes.py and new_rack_pbsmon.py so:
23   - We using argparse instead of OptionParser
24   - Changed the print statement to an print function which will work with Python 2.5+
25   - Removed module PBSAdvancedParser.py
26   Author: Dennis Stam
27
28=========== 4.3.5
29 * PBSQuery bugfix, parsing of node status line with multiple EVENT: settings
30   was wrong
31   Author: Bas van der Vlies
32
33 * Added an example how to make use of the EVENT status message:
34    - examples/pbs_script.sh
35   Author: Bas van der Vlies
36
37 * implemented __nonzero__ for PBS dictionary, closes #33, eg:
38    status = getjob(id)
39    if status:
40        do something
41    else:
42        no job
43  Author: Bas van der Vlies
44
45 * PBSQuery bugfix. getjob() can now handle short jobname, eg:
46    * p.getjob('6073545')
47
48   Author: Willem Vermin (SARA) & Bas van der Vlies
49
50 * added an example: pbs_jobmonitor shows the output of top
51   -u user on the node
52    - one cycle of top
53    - user: the user the job belongs to
54
55   renamed as pbs_joblogin logs in to the node as the user
56   who invokes this script (os.getenv('USER'))
57
58   Author: Willem Vermin (SARA)
59 
60=========== 4.3.3
61 * New generated files for pbs_wrap.c and pbs.py to support python 3.X versions
62   Reported by: Steve Traylen <steve dot traylen add cern dot ch>
63   Author: Bas van der Vlies
64
65 * Fixed AdvancedParser when using 01-12 range the zero was not appended.
66   Reported by: Ramon Bastiaans
67   Author: Dennis Stam
68
69 * examples/sara_nodes.py: Catch the PBSQuery error if we can not make a
70   connection with the batch server and exit the program.
71   Author: Bas van der Vlies
72
73 * Remove the debian dependency on AdvancedParser. We now have
74   our own PBSAdvanceParser so it does not conflict with other SARA
75   packages.
76   Reported by: Ramon Bastiaans (SARA)
77   Fixed by: Bas van der Vlies
78
79 * Make pbs_torque only dependend on libtorque instead of torque and adjusted
80   the maintainer of the package, closes #30
81   Reported by: Guillermo Marcus  <guillermo dot marcus add@gmail dot com>
82   Fixed by: Bas van der Vlies
83   
84=========== 4.3.0
85 * new_rack_pbsmon.py: For backward compatibility added -a/--all option.
86   Has the same functionality as -s/--summary
87   Author: Bas van der Vlies
88
89 * Added some license info to debian package and include GPL and LGPL 3.0
90   files.
91   Suggested by: W. Trevor King <wking at drexel dot edu>
92
93 * PBSQuery.py: Added support for new feature in node status field:
94    * message=EVENT:<key=value:>+
95    * message=ERROR <text>
96
97  Added the following syntax for node:
98        * node['error']
99    * node['event']
100
101  eg: node: n1
102    state = free
103    np = 8
104    properties = ib,switch1,highmem
105    ntype = cluster
106    jobs = 0/567403.sara.nl, 1/567403.sara.nl
107    status = ..,loadave=0.00,message=EVENT:sample.time=1288864220.003:cputotals.user=0:iconnect.pktout=0,netload=3487600394,state=free,...
108
109  example code:
110        p = PBSQuery()
111    node = p.getnode(n1)
112    print node.event['sample.time']
113    print node['event']['sample.time']
114
115   Requested by: Roy Dragseth <roy dot dragseth add uit dotno>
116   Author: Bas van der Vlies
117
118=========== 4.2.0
119 * Updated LICENSE file to LGPLV3. Thanks to Justin Bronder
120   (jsbronder add gentoo dot org) for the information and
121   explanation.
122
123 * examples/pbsmon.py. Patched so it also works for torque 2.5
124   Author: Stijn De Weirdt stijn dot deweirdt at ugent dot be
125   Applied by: Bas van der Vlies
126
127 * setup.py.in changed determine which torque version is installed
128   so we also support snapshots.
129   Author: Mark Roberts ( mark at gingergeeks dot co dot uk)
130   Applied by: Bas van der Vlies
131
132 * PBSQuery:
133   - get_nodes function for jobs now works for old and new datastructure and
134     gives correct results if unique=True
135     Reported by + idea for patch: Shunjie Lau (eijnuhs add gmail dot com)
136     Author: Bas van der Vlies
137
138 * Added AdvanceParser module. new_rack_pbsmon.py and sara_nodes.py make use of
139   this module
140   Author: Dennis Stam (Dennis dot Stam at sara dot nl)
141
142 * examples/new_rack_pbsmon.py:
143     - Better specification for node expression
144     - added a new option -l/--list to list the state of a nodes and which job
145       is running on it, eg:
146             new_rack_pbsmon.py - l gb-r[1-3]n[3-6] gb-r4[n1-20]
147
148   Authors: Dennis Stam & Bas van der Vlies
149   Applied by: Bas van der Vlies
150
151 * examples/sara_nodes.py:
152   An utility to set/clear notes for multiple nodes, see ..
153   Author: Dennis Stam (Dennis dot Stam at sara dot nl)
154
155 * setup.py.in:
156   Added support for runtime-libraries when torque is installed in a non-default
157   location, closes #22
158   Author: Mattias (slabanja at chalmers dot se)
159   Applied by: Bas van der Vlies
160
161 * Changed build system for debian
162   Authors: Dennis Stam & Bas van der Vlies
163
164=========== 4.1.2
165 * examples/new_rack_pbsmon.py now uses the new PBSQuery data
166   structure.
167   Author: Bas van der Vlies
168
169 * PBSQuery:
170     - fixed and error in get_jobs function for nodes. Did not
171       support new data structure and uniq did not work.
172       Authors: Shunjie Lau <eijnuhs at gmail dot com> and Bas van der Vlies
173
174=========== 4.1.0
175 * Delete function pbs.version() replaced by
176    * pbs.version
177        This is a string variable
178    * pbs.version_info
179        Is a tuple variable. So we can use it in scripts
180
181   This analogue with sys module, closes #20
182
183   Requested by: Dennis Stam ( Dennis dot Stam add sara dot nl )
184   Author: Bas van der Vlies
185
186 * More robust make/configure/setup.py
187   Reported by:
188        - Saidi, Yacine <saidi add linmpi dot mpg dot de>
189        - Shunjie Lau <eijnuhs add gmail dot com>
190   Author: Bas van der Vlies
191
192
193 * Only use the pbs_wrap.c and pbs.py 2.4 version for torque version 2.4.7 and higher.
194   Reported by: Saidi, Yacine <saidi add linmpi dot mpg dot de>
195   Author: Bas van der Vlies
196   
197=========== 4.0.2
198  * Quick fix so we do not get any undefined symbols. Forgot to
199    add the torque library when we compile the package.
200    Reported by: Shunjie Lau ( eijnuhs add gmail dot com)
201    Author: Bas van der Vlies
202
203=========== 4.0.1
204  * Fixed a bug in setting the right library path  for compiling.
205    Reported by: Chad Vizino ( vizino add psc dot edu )
206    Author: Bas van der Vlies
207   
208=========== 4.0.0
209  * pbs.py added some new functions for 2.4 version:
210    - pbs_fbserver(void);
211    - pbs_get_server_list(void);
212    - pbs_sigjobasync(int connect, char *job_id, char *signal, char *extend);
213    - pbs_alterjob_async(int connect, char *job_id, struct attrl *ATTRL, char *extend);
214    - pbs_checkpointjob(int connect, char *job_id, char *extend);
215    - log_ext(int,char *,char *,int);
216    - log_init(char *, char *);
217    - log_remove_old(char *,unsigned long);
218
219    Note: version 2.1.X is still supported
220
221  * autotools environment
222    - Added support for finding pbs-config (borrowed for mpiexec source)
223    - Detecting which version of torque is installed
224    - only support installations that have pbs-config installed.
225    - Removed old code for installations that do not a have pbs-config
226      installed.
227
228  * PBSQuery.py
229    - There was a bug in the new data interface (Resource_List for jobs)
230      Reported & Patch by: Mark Roberts ( mark at gingergeeks dot co dot uk)
231      Applied by with some minor changes: Bas van der Vlies
232
233    - The new data structure is the default. You can switch back to the old
234      one with:
235            p = PBSQuery()
236            p.old_data_structure()
237
238      Author: Bas van der Vlies
239
240   * examples/ha_server.py
241     An example how to use the High Availabilty torque functions
242     Author: Bas van der Vlies & Mark Roberts ( mark at gingergeeks dot co dot uk )
243
244=========== 3.6.0
245  * pbs, new generated pbs_wrap.c, pbs.py fixes a bug in pbs_runjob()
246    Reported by: Dennis Stam
247    Fixed by: Bas van der Vlies
248
249=========== 3.5.0
250  * PBSQuery
251        The class functions of node, job and queue support old and new data
252        structure.
253
254        Changed the behaviour of the new data stucture, We can use it as
255        dictionary and as class attribute, this is equivalent, eg:
256          - print node['np'] and print node.np
257
258        for a node we parse the 'status' line and split on '=' char, You now can
259        use these statements, eg
260          - print node.status.arch     (node['status'].arch or node['status']['arch'])
261          - print node.status.nsession
262
263        for a job we parse the 'Variable_List' line and split on '=' char, You now can
264        use the statements, eg:
265          - print job.Variable_List.PBS_O_WORKDIR
266          - print job.Variable_List.PBS_O_HOME
267
268        For more info see examples/new_interface.py
269
270    Author: Bas van der Vlies
271
272 * new_rack_pbsmon.py
273        Rewrite to new data structure and automatically determine how many nodes
274        and racks cluster has and skip printing of empty racks (default), use -w/--wide
275        for old behaviour.
276
277   Author: Bas van der Vlies
278
279
280=========== 3.2.0
281        - PBSQuery:
282          New data structure. In the old structure it is a dictionary
283          with a value and the value is a string. This is changed
284          that dictionary values are now of type list or dictionary depends
285          on the value of the keyword, eg for a node:
286            - np = 2:
287              * node['np'] = [ '2' ] 
288
289            - properties = cores2, mem4gb, parallel
290              * node['properties'] = [ 'cores2', 'mem4gb', 'parallel' ]
291
292            - status = arch=x86_64,sessions=22599,,size=70627864kb, ...
293              * node['status']['arch'] = [ 'x86_64' ]
294              * node['status']['sessions'] = [ '222599' ]
295              * ...
296
297         The data structure is activated by the function:
298          * new_data_structure()
299
300        In a future release it will be come the default.
301        example:
302                p = PBSQuery()
303                p.new_data_structure()
304
305                nodes = p.getnodes()
306                print nodes.np, nodes['np']
307
308        Author: Bas van der Vlies
309
310        - PBSQuery
311          For old and new data structure we now can use another syntax:
312           * node['np'] and node.np are equivalent
313
314          This new syntax works for all keywords.
315
316        Author: Bas van der Vlies
317
318        - Added iter object for job, node, queue and server objects, eg:
319          node = p.getnode('gb-r1n1')
320          print node.name
321          for attrib in node:
322                print '%\t%s = %s' %(attrib, node[attrib])
323        Author: Bas van der Vlies
324
325        - fixed an error in getnode, getqueue and getjob, return empty
326          dictionary if not found
327        Author: Bas van der Vlies
328       
329        - New build system for rpm packages, make -f Makefile.rpm
330          Author: Michel Jouvin <jouvin add lal dot in2p3 dot fr>
331
332        Applied: Bas van der Vlies
333
334=========== 3.0.1
335        - PBSQuery
336                * Removed a testing code line
337                Reported By: sam @ vpac dot org
338                Fixed by: Bas van der Vlies
339
340=========== 3.0.0
341        - PBSQuery
342                * Cleaned up some old lines of code which didn't do anything.
343                * Changed the returnvalue of getqueue, getnode and getjob. Now
344                  they return an instance of the object, instead of a dict.
345                  This is API change so we bumped the version to 3.0.0
346                * Now the getnode-function accepts the short name as well as
347                  the long name as an argument.
348
349                Author: Sil Westerveld <Sil.Westerveld@sara.nl>
350
351        - pbs.py, _pbs.so, PBSQuery.py
352                * Fixed a memory leak when used in daemon mode
353                Author: Bas van der Vlies <basv@sara.nl>
354
355=========== 2.9.8
356        - pbs_python.spec file patch added libdir and python defines so it
357          will build for RHEL5.1/CentOS 5.1
358          by        : Michael Sternberg <sternberg add anl dot gov>
359          applied by: Bas van der Vlies
360
361        - Updated the header files for pbs_python. So it can use some new
362          defines variables/defines, eg:
363                * ATTR_NODE_status
364                * ATTR_NODE_note
365                * ...
366          Added by: Dennis Stam <dennis.stam@sara.nl>, Bas van der Vlies
367
368        - Two new functions to log.h:
369                log_roll(int size);
370                log_size(void);
371          Added by: Bas van der Vlies
372
373        - We now have proper destructors (free memory) in SWIG for attrl and
374          attropl attributes.
375          Added by: Bas van der Vlies
376
377        - PBSQuery
378                * Added getnodes_with_property() function. This will get all nodes with
379                  a certain property, eg:
380                   - get all nodes with property 'cores8' and return all attributes:
381                      getnodes_with_property('cores8')
382               
383                   - get all nodes with property 'cores2' and only return the
384                     attributes 'state' and 'properties':
385                      attrl = [ 'state', 'properties' ]
386                      getnodes_with_property('cores2', attrl)
387               
388                     Only for torque version > 2.1.0
389             
390                Added by: Bas van der Vlies
391
392                * Added to class node the function
393                 - get_jobs(self, unique=None)
394                   Returns a list of the currently running job-id('s) on the node.
395                Added by: Sil Westerveld <Sil.Westerveld@sara.nl>
396
397                * Added get_server_name() function.
398                  This will return the PBS-server's name.
399                Added by: Sil Westerveld <Sil.Westerveld@sara.nl>
400
401                * Added to class _PBSobject the function
402                  - uniq(self, list)
403                    Filters out unique items of a list.
404                Added by: Sil Westerveld <Sil.Westerveld@sara.nl>
405
406                * Added to class job the function
407                  - get_nodes(self, unique=None)
408                    Returns a list of the nodes which run the job.
409                Added by: Sil Westerveld <Sil.Westerveld@sara.nl>
410
411=========== Version 2.9.4
412        -  Function pbs.pbs_geterrmsg does not exits any more is
413           replaced by pbs.error():
414                errno, text = pbs.error()
415                print errno, text
416           Reported by: pk at q-leap dot com
417           Fixed by   : Bas van der Vlies
418
419        - PBSQuery.py
420           * Added get_version() for server class, returns the version of
421             the batch server
422             Added by    : Bas van der Vlies
423
424           * Added get_nodes() for job class, returns a list of nodes on
425             which the job is run
426             Added by    : Bas van der Vlies
427
428           * PBSQuery.py rewrite make use of UserDict module.
429             Suggested by: Ramon Bastiaans
430             Fixed by    : Bas van der Vlies
431
432=========== Version 2.9.2
433        - The function pbs_rescquery() did not work. Fixed it
434        - The function avail(), did not work fixed it
435        - The functions pbs_rescreserve and pbs_rescrelease did not work
436          fixed it
437
438        - Fixed a bug in new_rack_pbsmon.py. Counting of serial
439          nodes was wrong and state down has topmost priority
440
441=========== Version 2.9.0
442        - Added support for new torque build system 2.1.0
443        - Added new_rack_pbsmon.py
444          Authors: Walter de Jong & Bas van der Vlies
445
446=========== Version 2.8.2
447
448Configure has a new option:
449        --with-pbsdir=PATH
450
451If set it will use PATH specified as argument to
452find the pbs/torque libraries. If unset it will use
453some useful defaults to find the libaries.
454Suggested by: Troy Baer
455
456PBSQuery.py:
457        - If we can not make a connection with the server
458          then raise an exception and let the programmer
459          decides what to do.
460
461pbs_python.spec:
462        - It can now handle mode bits
463          Author: Martin Pels from SARA
464       
465=========== Version 2.8.0
466
467setup.py:
468        - Added /usr/lib to PBS_LIB_DIR
469
470pbs.py:
471        - Added new function "pbs.error()". This function checks if
472          an error has occured with a pbs function, eg:
473            task_id = pbs.pbs_submit(c, attrl, "A.tsk", 'NULL', 'NULL')
474            error_number, err_txt = pbs.error()
475            if error_number:
476                print error_number, err_txt
477
478          prints the following message if script A.tsk does not exists:
479            15042 (qsub) cannot access script file
480
481pbs_python.spec:
482        - to make rpm packages from the source package, initial version
483        Author: Martin Pels from SARA
484
485README:
486        - Now requires python 2.1 and higher
487        - Explain how to build DEBIAN package
488
489=========== Version 2.7.10
490
491PBSQuery.py:
492        Fixed an error. You always got all resources from eg nodes
493        even when you supplied an attribute list where you only
494        requested the 'state' of the node.
495
496        Updated the inline python documentation
497
498=========== Version 2.7.9
499
500Fixed an error the previous version was in DEBUG mode. So
501you get an lot undesired output on the screen.
502
503debian package now also generated a package with the write
504version info.
505
506=========== Version 2.7.8
507
508Setup.py:
509        Can also handle ROCKS installations + the version
510        info is now the same as pbs.py
511        Thanks to: Roy Dragseth
512
513=========== Version 2.7.7
514
515PBSQuery module:
516  It can now be used in daemon programs. The pbs_server closes
517  the connection after an certain amount of time. This is fixed,
518  before every query there is an new connection and if the query
519  is finished the connection is closed.
520 
521=========== Version 2.7.6
522
523Now setup.py can also handle old Oscar Installations.
524Thanks To: Robin Humble
525
526Fixed an print statement fix in new_interface.py:
527Thanks To: Robin Humble
528
529Made some improvements for PBSQuery module:
530        - Updated the documentation
531        - Added the has_key() function to all
532          PBSObjects. So that the behaviour is similar to
533          an dictionary
534          Suggested By: Ramon Bastiaans
535       
536=========== Version 2.7.5
537 Added PBSQuery module.  This module requires pbs.py and it a simple module
538 for querying the pbs server. The documentation is in the module. Use for
539 example ipython to read it.
540
541 Written By: Roy Dragseth
542             Bas van der Vlies
543
544 eg: ( see also examples/new_interface.py)
545
546 from PBSQuery import PBSQuery
547 p = PBSQuery()
548
549 jobs = p.getjobs()
550 for name, job in jobs.items()
551        print job
552
553=========== Version 2.7.4
554 New versions fixes an bug in function pbs.pbs_statnode().
555 Reported by: Keith Poirier
556
557 Configure support:
558 Contributed By: Yaroslav Halchenko
559
560 Debian package support:
561 Contributed By: Yaroslav Halchenko
562
563 Added Support for Debuging the interface, You must edit pbs_wrap.c
564 and search for SARA_DEBUG:
565        #define SARA_DEBUG 1
566 Implemented by: Ramon Bastiaans
567
568 examples/pbsmon.py:
569        - Fixed an error when regex fails to determine node number,
570          no status was displayed
571        - It will now display and 'j' if the node is free for the batch
572          system and a job runs on the node (SMP-systems).
573 Changed by: Bas van der Vlies
574
575 examples/rack_pbsmon.py:
576        - An pbsmon that display node info per rack
577        - Edit the rack_pbsmon.py to adjust the values. It requires
578          that hostname contains rack and node id's,
579          eg: gb-r<number>n<number>
580 Contributed by: Walter de Jong
581
582=========== Version 2.7.3
583 The name SPBS is changed to the new name TORQUE (Tera-scale Open-source
584 Resource and QUEing manager).
585
586 The interface support OPENPBS and TORQUE.
587
588=========== Version 2.7.2
589 Some minor changes to include files. Now the Scalable PBS keywords
590 are also supported ( server attribute names: node_ping_rate and
591 node_check_rate). This does not interfere with the openpbs software.
592
593 pbsmon.py could not handle an one node cluster. Fixed it.
594
595=========== Version 2.7
596 Forgot to wrap the pbs_statfree() function. So we could not free
597 allocated memory from functions that return 'struct batch_status *'
598 like pbs_statjob().
599
600 pbsmon.py can now handle 2 and 3 digit hostnames. Patch supplied by
601 Daniel Olson
602
603=========== Version 2.6.1
604 Setup.py now checks if all openpbs libraries are installed to compile the
605 package.
606
607=========== Version 2.6
608
609 Fixed a bug in the pbs python module. Forgot to map the pbs_statjob()
610 function. This bug prevented to pass 'struct attrl' variables to this
611 function. Thanks to Evelyn Shiu for reporting this bug.
612
613
614=========== Version 2.5
615 Added the OpenPbs logging functions (log.h and liblog.a). There
616 is an example in the examples directory: logpbs.py
617
618 Fixed a bug in examples/resmom_info.py used the default port for
619 pbs_resmon if getservbyname fails.
620
621 Fixed a bug in resmom code. If the user has no permissions to query
622 the pbs_mom daemon a empty string is returned. Now we check for
623 the empty string. So we do not get a python exception.
624
625 Fixed a bug in setup.py forgot the exit statement when we did not
626 find the pbs libraries.
627
628=========== Version 2.3
629 Bugfix in the pbsnodes-a.py. Forgot to import the sys module.
630
631 Removed some obsolete code.
632
633 As for now we make use of the distutils module. So the package
634 is automatically compiled and installed in proper directories, usage:
635    python setup.py install
636 This requires that the package 'distutils' must be installed. As for
637 version 1.6 and higher it is in the distribution.
638
639 Added a function that prints the pbs python interface version. So we
640 can check if we have the right interface version:
641 import pbs
642 print pbs.version()
643 
644
645=========== Version 2.2
646
647In this release we can query the pbs_mom daemon with the aid of
648resource management functions:
649   pbs.openrm()
650   pbs.closerm()
651   pbs.downrm()
652   pbs.configrm()
653   pbs.addreq()
654   pbs.allreq()
655   pbs.flushreq()
656   pbs.activereq()
657   pbs.fullresp()
658   pbs.getreq()
659
660There is also a python function:
661   pbs.get_mom_values(id, [list]):
662     id   - connection id of pbs.openrm(node-name, port-number)
663     list - Is a optional paramter. A list of resource keywords
664
665   If 'list' is not supplied then this function will get the values
666   for the standard resource keywords, eg uname, loadave, .. + 'arch'
667   depended keywords. The arch feature is only implemented for linux,
668   but it can easily be ported to other oses.
669
670   if 'list' is supplied then we only fetch values for the keywords
671   that are in the list.
672
673   The function returns a dictonary. The keys are the resource keywords.
674
675   See 'resmom_info.py' for a example of this new feature.
676
677=========== Version 2.0
678
679The previous version was a simple interface above the PBS C API LIB.  This
680interface has gone a major changes. The most noticeable change is  that
681the functions accept/return Python lists instead of C-lists.  So you can now
682use standard Python syntax for manipulating Python lists. If you are familar
683with the Python syntax then you will appreciate this new interface.
684
685NOTE:
686  This interface is NOT compatible with the old one
687
688Here are some guidelines to convert your code to the new one:
689
690The constructors for the struct has gone a major change:
691  old code:
692    temp = pbs.new_attrl();
693    attrl_p = pbs.attrlPtr(temp)
694    attrl_p.name = 'state'
695
696  new_code:
697     attr_l = pbs.new_attrl(1)   // Creates a list of attrl structs length 1
698     attr_l[0].name = 'state'
699
700
701The pbs_stat functions returns Python lists instead of C-lists. There is
702NO next field anymore:
703  old_code:
704    temp = pbs.new_attrl();
705    attrl_p = pbs.attrlPtr(temp)
706    attrl_p.this = 'NULL'
707
708    nodes = pbs.pbs_statnode(con, "", attrl_p, "NULL")
709
710    while nodes.this != 'NULL':
711      print nodes.name
712
713      node_attrl = nodes.attribs
714      while node_attrl.this != 'NULL':
715        print '\t', node_attrl.name, '=', node_attrl.value
716        node_attrl = node_attrl.next
717
718    nodes = nodes.next
719
720
721  new_code:
722    nodes = pbs.pbs_statnode(con, "", "NULL", "NULL")
723    for node in nodes:
724      print node.name
725      for attrib in node.attribs:
726        print '\t', attrib.name, '=', attrib.value
727
728Another advantage is you can use the print statement to show the
729connect of attrl and attropl classes:
730   attr_l = pbs.new_attrl(2)
731   attr_l[0].name = 'bas'
732   attr_l[0].value = 'van der Vlies'
733
734   print  attr_l[0]
735   >> (bas,,van der Vlies)
736   
737I hope these examples illustrate the changes. If you specify a wrong type
738for a function then function wil raise a Python exception.
Note: See TracBrowser for help on using the repository browser.