source: trunk/CHANGES @ 311

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

swig development environment

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