*ë
€'á:c       s.    d  Z  , / d k Z 0 d k Z 1 y 2 d k l Z Wn& 3 e j
 o 4 d k l Z n X6 d f  d „  ƒ  YZ L d f  d „  ƒ  YZ V d f  d „  ƒ  YZ i d	 f  d
 „  ƒ  YZ	 w d f  d „  ƒ  YZ
 Š d f  d „  ƒ  YZ å d „  Z ð d „  Z ô d „  Z ø e d j o ù e ƒ  n d S(   sS  Iterate over records of a XML parse tree

The standard parser is callback based over all the elements of a file.
If the file contains records, many people would like to be able to
iterate over each record and only use the callback parser to analyze
the record.

If the expression is a 'ParseRecords', then the code to do this is
easy; use its make_reader to grab records and its record_expression to
parse them.  However, this isn't general enough.  The use of a
ParseRecords in the format definition should be strictly a
implementation decision for better memory use.  So there needs to be
an API which allows both full and record oriented parsers.

Here's an example use of the API:
>>> import sys
>>> from Martel.formats import swissprot38
>>> from xml.dom import pulldom
>>> iterator = swissprot38.format.make_iterator("swissprot38_record")
>>> text = open("sample.swissprot").read()
>>> for record in iterator.iterateString(text, pulldom.SAX2DOM):
..      print "Read a record with the following AC numbers:"
...     for acc in record.document.getElementsByTagName("ac_number"):
...         acc.writexml(sys.stdout)
...         sys.stdout.write("
")
...


There are several parts to this API.  First is the 'Iterator

There are two parts to the API.  One is the EventStream.  This
contains a single method called "next()" which returns a list of SAX
events in the 2-ple (event_name, args).  It is called multiple times
to return successive event lists and returns None if no events are
available.

The other is the Iterator

Sean McGrath has a RAX parser (Record API for XML) which uses a
concept similar to this.
N(   s   StringIOs   StoreEventsc      se   6 7 d „  Z  : d „  Z < d „  Z ? d „  Z B d „  Z D d „  Z G d „  Z I d „  Z RS(	   Nc    s   7 8 g  |  _ d  S(   N(   s   selfs   events(   s   self(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   __init__7 s   c    s
   : ; d  S(   N(    (   s   self(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   startDocument: s   c    s
   < = d  S(   N(    (   s   self(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   endDocument< s   c    s    ? A |  i i d | f ƒ d  S(   Ns   startElement(   s   selfs   eventss   appends   args(   s   selfs   args(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   startElement? s   c    s    B C |  i i d | f ƒ d  S(   Ns
   characters(   s   selfs   eventss   appends   args(   s   selfs   args(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys
   charactersB s   c    s    D E |  i i d | f ƒ d  S(   Ns
   endElement(   s   selfs   eventss   appends   args(   s   selfs   args(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys
   endElementD s   c    s    G H |  i i d | f ƒ d  S(   Ns   error(   s   selfs   eventss   appends   args(   s   selfs   args(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   errorG s   c    s    I J |  i i d | f ƒ d  S(   Ns
   fatalError(   s   selfs   eventss   appends   args(   s   selfs   args(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys
   fatalErrorI s   (   s   __init__s   startDocuments   endDocuments   startElements
   characterss
   endElements   errors
   fatalError(    (    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   StoreEvents6 s   s   EventStreamc      s   L M d „  Z  O d „  Z RS(   Nc    s   M N | |  _ d  S(   N(   s
   event_lists   selfs   events(   s   selfs
   event_list(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   __init__M s   c    s>   O P |  i o# Q |  i } R t |  _ S | Sn T t Sd  S(   N(   s   selfs   eventss   xs   None(   s   selfs   x(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   nextO s
   (   s   __init__s   next(    (    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   EventStreamL s   s   Iteratorc      s5   V W d „  Z  [ d „  Z c d „  Z f d „  Z RS(   Nc    s   W X | |  _  Y | |  _ d  S(   N(   s   parsers   selfs   tag(   s   selfs   parsers   tag(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   __init__W s   c    sn   [ \ ] t  ƒ  } ^ |  i i | ƒ _ |  i i | ƒ ` |  i i | ƒ a t t	 | i ƒ |  i
 | ƒ Sd S(   s    create an iterator over a stringN(   s   StoreEventss   eventss   selfs   parsers   setContentHandlers   setErrorHandlers   parseStrings   ss   Iterates   EventStreams   tags   make_cont_handler(   s   selfs   ss   make_cont_handlers   events(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   iterateString[ s   c    s#   c d |  i |  | i ƒ  | ƒ Sd  S(   N(   s   selfs   iterateStrings   fileobjs   reads   make_cont_handler(   s   selfs   fileobjs   make_cont_handler(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   iterateFilec s   c    s#   f g |  i t i | ƒ t ƒ Sd  S(   N(   s   selfs   iterateFiles   urllibs   urlopens   systemIds   make_cont_handler(   s   selfs   systemIds   doc_handler(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   iteratef s   (   s   __init__s   iterateStrings   iterateFiles   iterate(    (    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   IteratorV s   s   RecordEventStreamc      s   i j d „  Z  m d „  Z RS(   Nc    s   j k | |  _  l | |  _ d  S(   N(   s   readers   selfs   parser(   s   selfs   readers   parser(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   __init__j s   c    sƒ   m n |  i i ƒ  } o | t j o p t Sn q t ƒ  } r |  i i | ƒ s |  i i	 | ƒ t |  i i
 | ƒ u | i Sd  S(   N(   s   selfs   readers   nexts   texts   Nones   StoreEventss   eventss   parsers   setContentHandlers   setErrorHandlers   parseString(   s   selfs   eventss   text(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   nextm s   (   s   __init__s   next(    (    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   RecordEventStreami s   s   IteratorRecordsc      s5   w x d „  Z  ~ d „  Z  d „  Z ‡ d „  Z RS(   Nc    s7   x y | |  _  z | |  _ { | |  _ | | |  _ d  S(   N(   s   record_parsers   selfs   make_readers   reader_argss
   marker_tag(   s   selfs   record_parsers   make_readers   reader_argss
   marker_tag(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   __init__x s   c    s    ~  |  i t | ƒ | ƒ Sd  S(   N(   s   selfs   iterateFiles   StringIOs   ss   make_cont_handler(   s   selfs   ss   make_cont_handler(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   iterateString~ s   c    sN    ‚ t  |  i ƒ | f |  i ƒ } „ t t | |  i ƒ … |  i	 | ƒ Sd  S(   N(   s   applys   selfs   make_readers   fileobjs   reader_argss   record_readers   Iterates   RecordEventStreams   record_parsers
   marker_tags   make_cont_handler(   s   selfs   fileobjs   make_cont_handlers   record_reader(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   iterateFile s   c    s#   ‡ ˆ |  i t i | ƒ | ƒ Sd  S(   N(   s   selfs   iterateFiles   urllibs   urlopens   systemIds   make_cont_handler(   s   selfs   systemIds   make_cont_handler(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   iterate‡ s   (   s   __init__s   iterateStrings   iterateFiles   iterate(    (    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   IteratorRecordsw s   s   Iteratec      s)   Š ‹ d „  Z  • d „  Z Þ d „  Z RS(   Nc    sg   ‹ Œ | |  _   t |  _ Ž | |  _  | |  _  d |  _ ‘ d |  _ ’ d |  _ “ d |  _	 d  S(   Ni    (
   s   event_streams   selfs   Nones   eventss   tags   make_cont_handlers   _ns   start_positions   end_positions   current_position(   s   selfs   event_streams   tags   make_cont_handler(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   __init__‹ s   c 	   sñ  • – |  i } — | o= ˜ |  i i ƒ  } ™ | t j o š t Sn › | |  _ n  d } ž t | ƒ }   xe  d oZ¡ | | j oM ¢ |  i i ƒ  } £ | t j o ¤ Pn ¥ | i	 | ƒ ¦ t | ƒ } n ¨ | | \ } } © | d j p
 | d j o « t |  _ ¬ | d ‚ n ® | d j o | d |  i j oK¯ |  i |  _ ° |  i ƒ  } ± | i ƒ  ² xý² | | j  oì³ | | \ } } ´ | d j oÓ · | d } ¸ x§ ¸ | | j  o– ¹ | | \ } } º | d j o | d |  i j o » |  i | d 4¼ | ‚ n1 ½ | d j o  ¾ |  i t | d ƒ 7_ n ¿ | d } qÄWÁ t |  _ Â | ‚ nó Ã | d j o Å t |  _ Æ | d ‚ nÆ È t t | | ƒ | ƒ É | d j o | d |  i j oK Ê |  i |  _ Ë |  i | d 4Ì | i ƒ  Í |  i d |  _ Î | Sn1 Ï | d j o  Ð |  i t | d ƒ 7_ n Ñ | d } q~WÓ t d t |  i ƒ ‚ n> Ö | d j o  × |  i t | d ƒ 7_ n Ø | d } qu WÛ t |  _ Ü t Sd  S(	   Ni    i   s   errors
   fatalErrors   startElements
   endElements
   characterss    no endElement(%s) and no errors?(   s   selfs   eventss   event_streams   nexts   Nones   is   lens   ns
   new_eventss   extends   names   argss   tags   current_positions   start_positions   make_cont_handlers   cont_handlers   startDocuments   excs   applys   getattrs   end_positions   endDocuments   _ns   AssertionErrors   repr(	   s   selfs   eventss   names   is   ns   argss
   new_eventss   excs   cont_handler(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   next• sv   	 
$  $ $  c    sa   Þ ß t  o | |  i j p
 t d ‚ à |  i ƒ  } á | t j o â t | ‚ n ã | Sd  S(   Ns   forward iteration only(	   s	   __debug__s   ns   selfs   _ns   AssertionErrors   nexts   xs   Nones
   IndexError(   s   selfs   ns   x(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   __getitem__Þ s
   $(   s   __init__s   nexts   __getitem__(    (    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   IterateŠ s   
Ic     s’   å æ d k  l } ç d k l } è | i i d ƒ } é t d ƒ }  ê | i	 ƒ  } ë d k l } í x" | i |  | ƒ d í r	 } î q~ Wd  S(   N(   s   swissprot38(   s   supports   swissprot38_records.   /home/dalke/ftps/swissprot/smaller_sprot38.dat(   s   saxlibi    (   s   Martel.formatss   swissprot38s   Martel.tests   supports   formats   make_iterators   iterators   opens   infiles   Dumps   outputs   xml.saxs   saxlibs   iterateFiles   record(   s   infiles   supports   outputs   iterators   swissprot38s   saxlibs   record(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   test1å s    	c     s=   ð ñ t  i d t  i d ƒ ƒ } ò t d t | ƒ ƒ }  d  S(   Ns   letters   as   all(   s   Martels   Groups   Iss   record_formats   Reps   format(   s   formats   record_format(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   test2ð s   c      s   ô õ t  ƒ  ö t ƒ  d  S(   N(   s   test1s   test2(    (    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   testô s   
s   __main__(   s   __doc__s   urllibs   Parsers	   cStringIOs   StringIOs   ImportErrors   StoreEventss   EventStreams   Iterators   RecordEventStreams   IteratorRecordss   Iterates   test1s   test2s   tests   __name__(   s   test2s   Iterates   StoreEventss   RecordEventStreams   IteratorRecordss   urllibs   Parsers   tests   StringIOs   Iterators   EventStreams   test1(    (    s9   /mit/seven/lib/python2.1/site-packages/Martel/Iterator.pys   ?, s"   
[