source: trunk/CHANGES @ 295

Last change on this file since 295 was 295, checked in by dennis, 10 years ago

Bumped version number to 4.3.6, modified debian/control file to ensure a dependicy
for python-argparse when your are using Python 2.6 or lower.

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