source: trunk/CHANGES @ 303

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

updated CHANGES file

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