
jOc           @   s   d  d k  Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k l	 Z	 d  d k
 l Z d d d d Z d Z e i i e i i e i i e  d	 d
 d   Z d e i i i f d     YZ e   Z d S(   iN(   t   parlPhrases(   t   ContextExceptions/   Hon\.? Members|Members of the House of Commons|s:   Deputy? ?Speaker|Second Deputy Chairman(?i)|Speaker-Elect|s6   The Chairman|First Deputy Chairman|Temporary Chairman|s   An hon. Members   The Chairman|Chairman|The Chairi    s   ..t   memberst
   MemberListc           B   s7  e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z e d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z e d  Z d   Z  d   Z! d   Z" d   Z# d    Z$ RS(!   c         C   s   |  i    d  S(   N(   t	   reloadXML(   t   self(    (    s"   ../pyscraper/resolvemembernames.pyt   __init__!   s    c         C   s  h  |  _  h  |  _ h  |  _ d  |  _ g  |  _ h  |  _ h  |  _ h  |  _ h  |  _	 h  |  _
 h  |  _ h  |  _ h  |  _ h  |  _ d  |  _ d |  _ t i d |  i  |  _ t i d t i  |  _ d |  _ t i d |  i  |  _ t i i   } | i |   d  |  _ | i t i  i! t" d   d  |  _# | i t i  i! t" d   | i t i  i! t" d   | i t i  i! t" d	   d  |  _$ | i t i  i! t" d
   | i t i  i! t" d   | i t i  i! t" d   | i t i  i! t" d   d  S(   Ns   Dr |Hon |hon |rah |rh |right hon |Mrs |Ms |Mr |Miss |Mis |Rt Hon |Reverend |The Rev |The Reverend |Sir |Dame |Rev |Prof |Professor |Earl of s   ^(?:%s)s   ^%s$sV    MP| CBE| OBE| KBE| DL| MBE| QC| BEM| rh| RH| Esq| QPM| JP| FSA| Bt| B.Ed \(Hons\)| TDs   (?:%s)$s   constituencies.xmls   sp-constituencies.xmls   all-members.xmls   all-members-2010.xmls
   people.xmls   ministers.xmls   ministers-2010.xmls   member-aliases.xml(%   R   t	   fullnamest	   lastnamest   Nonet
   debatedatet   debatenamehistoryt   debateofficehistoryt   constoidmapt   considtomembermapt   considtonamemapt   conshansardtoidt   historichansardt   partiest   officetopersonmapt   persontoofficemapt   chairmant   titlest   ret   compilet   retitlesR    t
   regexpjobst   rejobst   honourificst   rehonourificst   xmlt   saxt   make_parsert   setContentHandlert   loadconsattrt   parset   ost   patht   joint   members_patht   loadspconsattrt
   loadperson(   R   t   parser(    (    s"   ../pyscraper/resolvemembernames.pyR   $   sB    																				c         C   sR
  | d j o| i    } |  i i | d  o t d | d  n | |  i | d <| d d | d } |  i i | g   i |  t i d | d  } | o6 | d d | d } |  i i | g   i |  n | d } |  i	 i | g   i |  | d	 } |  i
 | } d  } x | D] }	 t | d
  d j o d | d
 p | d
 }
 t | d  d j o d | d p | d } |	 d
 |
 j of |
 | j oY | |	 d j oH | o3 | |	 d j o" t d | |	 d | d f  n |	 d } q%q%W| p t d | d	  n |  i | } | | d	 j o t d | d	 | f  n x |  i i | g   D] } | d d j  o qqn | d
 | d
 j o | d j n p~ | d
 | d j o | d j n pT | d
 | d
 j o | d j n p* | d
 | d j o | d j n o t d |  qqqqW|  i i | g   i |  | d } |  i i | g   i |  | i d  o* |  i i t | d  g   i |  qN
n| d j o0d  } t } | i d  o; |  i i | d d   } | p d | d GHd GHd  Sn| i d  o? |  i	 i | d d   } t } | p t d | d  q2n | i d	  o |  i
 i | d	 d   } | p t d | d	  n g  } xE | D]= }	 |	 d } |  i i | d   } | o | i |  qqW| p t d | d	  q2n x| D] } h  } | d | d <t | d
 | i d d   } t | d | i d d    } | | j oc | | d
 <| | d <| o$ |  i i | d! g   i |  q|  i	 i | d! g   i |  q9q9WnF| d	 j o | i d"  o$ | d" d# j o | i    |  _ qN
h | d d 6| d
 d
 6| d d 6|  _ | i d  o | d |  i d <n t |  i d
  d j o d |  i d
 |  i d
 <n t |  i d  d j o d |  i d |  i d <qN
nF| d$ j od|  i o |  i d |  i j o | d% |  i |  i d <n |  i
 i | d% g   i |  i  |  i | d%  } |  i
 i | g   i |  i  |  i i d  o |  i d |  i |  i d <qvqN
|  i o d& | d% } |  i d |  i j o | |  i |  i d <n |  i
 i | g   i |  i  |  i |  } |  i
 i | g   i |  i  qN
n| d' j o | d |  _ n| d( j ox |  i p
 t d)  | d |  i j o t d* | d  n |  i |  i | d <|  i i |  i g   i | d  n2| d+ j o$| d, d2 j o|  i i | d  o |  i | d } |  i | } x | D] } | i  d0  d1 j o qw	n |  i | } h  } | d | d <t | d
 | i d
 d   } t | d | i d d    } | | j o8 | | d
 <| | d <|  i i | d, g   i |  qw	qw	WqJ
qN
n d  S(3   Nt   membert   ids*   Repeated identifier %s in members XML filet	   firstnamet    t   lastnames   ^(\S*)\s\S$i    t   constituencyt   fromdatei   s   %s-01-01t   todates   %s-12-31s-   Two constituency ids %s %s overlap with MP %ss   Constituency '%s' not foundsZ   Constituency '%s' in members file differs from first constituency '%s' listed in cons files
   1997-05-01s9   Two MP entries for constituency %s with overlapping datest   partyt
   hansard_idt   aliast   fullnames   Canonical fullname not found s     Why is this suddenly failing?s   Canonical lastname not found s   Constituency name not found s!   Canonical constituency not found t   froms
   1000-01-01t   tos
   9999-12-31t	   alternatet
   parliamentt	   edinburght   namet   texts   sp: t   persont   offices    <office> tag before <person> tags    Same office id %s appeared twicet   mofficet   positions   Solicitor Generals   Advocate General for Scotlands   Attorney Generals   /member/i(   s   Solicitor Generals   Advocate General for Scotlands   Attorney General(!   t   copyR   t   gett	   ExceptionR   t
   setdefaultt   appendR   t   findallR   R   R	   t   lenR   R   R   t   has_keyR   t   intt   Truet   Falset   extendt   maxt   minR(   R"   t	   strippuncR   R)   t   AssertionErrorR   R   t   find(   R   R<   t   attrt   compoundnamet   fnnomidinitialR/   t   const   considst   considt   consattrt   attr_fromdatet   attr_todatet   backformed_const   curattrR3   t   matchest   alternateisfullnameR   t   mt   newattrt   earlyt   latet   nopunct   altered_nameR>   t   idsR,   (    (    s"   ../pyscraper/resolvemembernames.pyt   startElementO   s    

 00"  ****
.	 
 

$,!
##
#' 

c         C   s'   | d j o d  |  _ d  |  _ n d  S(   NR0   (   R	   R"   R(   (   R   R<   (    (    s"   ../pyscraper/resolvemembernames.pyt
   endElement  s    	c         C   s   |  i  i   S(   N(   R   t   keys(   R   (    (    s"   ../pyscraper/resolvemembernames.pyt	   partylist  s    c         C   s"   t  i i   i   } |  i |  S(   N(   t   datetimet   datet   todayt	   isoformatt   mpslistondate(   R   Rm   (    (    s"   ../pyscraper/resolvemembernames.pyt   currentmpslist  s    c         C   sa   |  i  i   } g  } xE | D]= } | | d j o& | | d j o | i | d  q q W| S(   NR1   R2   R,   (   R   t   valuesRF   (   R   Rl   R^   Rf   RS   (    (    s"   ../pyscraper/resolvemembernames.pyRo     s     "c         C   s   | i  d d  } | i  d d  } | i  d d  } | i  d d  } d } d } x7 | d j o) |  i i d |  \ } } | | } qW Wd } d } x7 | d j o) |  i i d |  \ } } | | } q W| i   | f S(	   Nt   .R.   t   ,s   &nbsp;s     i    i   t    (   t   replaceR   t   subnR   t   strip(   R   R=   t
   titletotalt   titlegott   honourtotalt	   honourgot(    (    s"   ../pyscraper/resolvemembernames.pyt   striptitles!  s"      c         C   s:   | i  d d  i  d d  i  d d  i   i   } | S(   NRs   Rt   t   -R.   (   Ru   t   lowerRw   (   R   RV   Rd   (    (    s"   ../pyscraper/resolvemembernames.pyRP   9  s    6c         C   s  |  i  |  \ } } t   } |  i i | d   } | o& | d j o |  i i | d   } n | o3 | d j p | d j o |  i i d d   } n | oe | d j p | d j p | d j o> t i |  i i d d    } | i |  i i d	 d    n | o x | D] } | d  j p" | | d
 j o& | | d j o | i	 | d  n | d d j o/ | d j o" | d j o | i	 | d  qqWn | S(   Ni    t   Speakers   The Speakert   SPKs   Deputy Speakers   Deputy-Speakers   Madam Deputy Speakert   DCWMt   CWMR1   R2   R,   s   uk.org.publicwhip/member/1992s
   2008-09-01s
   2008-09-30(
   R|   t   setR   RC   R	   R   R   RB   RM   t   add(   R   t   tinputRl   R=   Rx   Rf   R^   RS   (    (    s"   ../pyscraper/resolvemembernames.pyt   fullnametoids>  s$    	"/  /+c         C   s  |  i  |  } |  i i | d   } | p t d |  n t   } x | D] } | d | j o | | d j op | d } |  i | } xV | D]J } | d  j p" | | d j o& | | d j o | i | d  q q WqL qL W| }	 t |	  d j o d St |	  d j ob d t	 d | p d	 d | d |	 i
   d
 }
 |
 GHt |	  } | i   d  d t |  f Sx |	 D] } qWd |  i | d |  i | d f } |  i | d } | | | f S(   Ns   Unknown constituency %sR1   R2   R,   i    i   s   Matched multiple times: s    : s   [nocons]s-    - perhaps constituency spelling is not knownt   MultipleMatchu   %s %sR-   R/   R0   (   NNN(   RP   R   RC   R	   RD   R   R   R   RH   R6   t   __str__t   listt   sortt   tupleR   (   R   RV   Rl   RW   t   newidsRY   RX   R^   RS   Rf   t	   errstringt   lidst   lidt
   remadenamet
   remadecons(    (    s"   ../pyscraper/resolvemembernames.pyt	   matchconsX  s<    	 "
 /!,
 &c         C   s_  | } |  i  |  } | i   } | o |  i |  } n |  i | |  } |  i i | d   } | o  | o | o t d |  n | o t |  d j p | o t	   } x | D] }	 | d  j p" |	 d | j o | |	 d j o |	 d }
 |  i
 |
 } xk | D]_ } | d  j p" | | d j o; | | d j o* | d | j o | i | d  qlqqWq q W| } n t |  d j o d St |  d j o] | o, d | | p d | | i   f } | GHn t |  } | i   d  d	 t |  f Sx | D] } qWd
 |  i | d |  i | d f } |  i | d } | | | f S(   Ns   Unknown constituency %si   R1   R2   R,   i    sV   Matched multiple times: %s : %s : %s : %s - perhaps constituency spelling is not knowns   [nocons]R   u   %s %sR-   R/   R0   (   NNN(   t	   basicsubsRw   RP   R   R   RC   R	   RD   RH   R   R   R   R   R   R   R   R   (   R   R6   RV   Rl   t   alwaysmatchconst   origfullnameRf   RW   R   RY   RX   R^   RS   R   R   R   R   R   (    (    s"   ../pyscraper/resolvemembernames.pyt   matchfullnamecons  sJ    !	 /
 /%
#	
 &c   	      C   s  |  i  |  } d | } |  i  |  } |  i | |  } t |  d j o d | | f St |  d j oe d } xM | D]E } | |  i | d d |  i | d d	 |  i | d
 d 7} q| Wd | | f Sx | D] } q W|  i | d d |  i | d } d | | | f S(   Ns    speakeroffice="%s"i    s7   speakerid="unknown" error="No match" speakername="%s"%si   Rt   R-   R.   R/   s    (R0   s   ) sE   speakerid="unknown" error="Matched multiple times" speakername="%s"%ss!   speakerid="%s" speakername="%s"%s(   R   R   RH   R   (	   R   R?   R6   Rl   t   speakerofficeRf   t   namesR,   R   (    (    s"   ../pyscraper/resolvemembernames.pyt   matchwmsname  s"    
 C $c         C   sd   t  i d |  } g  } | D] } | t i |  q ~ } d   } t | |  } t i | d  S(   Ns   ( |-|')c         S   st   t  i d |   o% |  d d !t i |  d  |  d St  i d |   o% |  d d !t i |  d  |  d S|  S(   Ns   Mc[a-z]i    i   i   s   Mac[a-z]i   (   R   t   matcht   stringt   upper(   t   word(    (    s"   ../pyscraper/resolvemembernames.pyt   handlescottish  s
    %%Rt   (   R   t   splitR   t
   capitalizet   mapR&   (   R   R<   t   wordst   _[1]R   R   (    (    s"   ../pyscraper/resolvemembernames.pyt   lowercaselastname  s
    *	c         C   s   |  i  |  S(   N(   R   (   R   R<   (    (    s"   ../pyscraper/resolvemembernames.pyt   fixnamecase  s    c         C   s   | i  d d  } | i  d d  } | i  d d  } | i  d d  } | i  d d  } | i  d	 d  } | i  d
 d  } t i d d |  } | S(   Ns   &#150;R}   s   &#039;t   's   &#39;s   &#146;s   &nbsp;R.   s   &rsquo;s   &#8217;s   \s{2,10}(   Ru   R   t   sub(   R   t   txt(    (    s"   ../pyscraper/resolvemembernames.pyR     s    c         C   s   g  |  _  h  |  _ d  S(   N(   R   R   (   R   (    (    s"   ../pyscraper/resolvemembernames.pyt   cleardebatehistory  s    	c      
   C   s*  d } |  i  |  } |  i |  | d j o d S|  i | |  } | oy|  i  |  } |  i | |  } | o` d | } t |  d j p& t |  d j o t i d |  o
 | } q | i |  } n |  i i | d   } | o t
   }	 x | D] }
 |
 d | j o | |
 d	 j o |
 d
 } |  i i | d   } | oa x^ | D]R } | | d j o; | | d	 j o* | d
 | j o |	 i | d
  qqVqVWqqqW|	 } qn t |  d j o t |  i  d } xJ | d j o< |  i | } | | j o t
 | g  } Pn | d 8} qW| d j o; | d j o. |  i d | j o t
 |  i d g  } qn | } | d j o
 d } n |  i i | d   } | o! t |  d j o
 | } qn | d j oG | d j o t
 |  |  i | <q3|  i i | t
    i |  n | } | o | d | d 7} n t |  d j o= t i t |  p t d |  n |  i i d   d | St |  d j o d } xM | D]E } | |  i | d d |  i | d d |  i | d d 7} qWt i t |  p t d | | f  n |  i i d   d | Sx | D] } qYW|  i i |  |  i | d d |  i | d } |  i | d d j o t i d |  o
 | } n |  i | d d j p |  i | d d  j o t i d! |  o
 | } n d" | | | f S(#   NRt   s	   The Queens>   speakerid="uk.org.publicwhip/royal/-1" speakername="The Queen"s    speakeroffice="%s" i    i   s   speaker(?i)R1   R2   R,   i   it   westminhalls   The Advocate-Generals!   The Advocate-General for Scotlands   The Temporary Chairs    (t   )s   No matches %ss5   speakerid="unknown" error="No match" speakername="%s"R-   R.   R/   R0   s   ) s%   Multiple matches %s, possibles are %ssC   speakerid="unknown" error="Matched multiple times" speakername="%s"R3   R   R   R   R   s   Deputy Speakers!   speakerid="%s" speakername="%s"%s(   R   t
   date_setupR   RH   R   t   searcht   intersectionR   RC   R	   R   R   R   R   R   RE   t   updatet   regnospeakersRD   RF   R   (   R   t   inputt   bracketRl   t   typR   Rf   t   brackidsRW   R   RY   RX   R^   RS   t   ixt   xR?   t	   officeidst	   rebracketR   R,   R   (    (    s"   ../pyscraper/resolvemembernames.pyt   matchdebatename  s    
9
	 "
 ") .
#	 C	 
$+
C
c         C   sN   |  i  | |  } t |  d j o d St i d |  o d | GHn d S(   Ni    i   s   Mr\. |Mrs\. |Miss |Dr\. s    potential missing MP name (   R   RH   R   R   (   R   R   Rl   Rf   (    (    s"   ../pyscraper/resolvemembernames.pyt   mpnameexists  s    c         C   sV   |  i  | d d j o t S|  i  | d d j p |  i  | d d j o t St S(   NR3   R   R   R   (   R   RK   RL   (   R   R,   (    (    s"   ../pyscraper/resolvemembernames.pyt	   isspeaker  s
    0c         C   s+   |  i  | j o | |  _  |  i   n d S(   s3   Clears the debate history if a new date is suppliedN(   R
   R   (   R   Rl   (    (    s"   ../pyscraper/resolvemembernames.pyR     s    	c   
      C   s   |  i  i | d  } | o t   } x | D] } | d | j o | | d j o | d } |  i i | d  } | oa x^ | D]R }	 | |	 d j o; | |	 d j o* |	 d | j o | i |	 d  q q q Wq q, q, W| } n | S(   sj   Return the intersection of a set of ids with any
        constituency matches for a text fragment
        R1   R2   R,   N(   R   RC   R	   R   R   R   (
   R   R=   Rf   Rl   RW   R   RY   RX   R^   RS   (    (    s"   ../pyscraper/resolvemembernames.pyt   intersect_constituency  s     	 "
 ")
c         C   s{   |  i  | d } |  i  | d o! d |  i  | d d | } n |  i  | d o! d |  i  | d d | } n | S(   NR/   R-   s   %sR.   t   title(   R   (   R   R,   R   (    (    s"   ../pyscraper/resolvemembernames.pyt   make_ctte_name  s    !!c         C   sd   t  |  i  d } xJ | d j o< |  i | } | | j o t | g  } Pn | d 8} q W| S(   Ni   i    i   (   RH   R   R   (   R   Rf   R   R   (    (    s"   ../pyscraper/resolvemembernames.pyt   disambiguate_from_history  s     c         C   s7   |  i  |  } |  i |  } | i   } | |  _ d  S(   N(   R   R   Rw   R   (   R   R   (    (    s"   ../pyscraper/resolvemembernames.pyt   set_chairman  s    c         C   s   |  i  S(   N(   R   (   R   (    (    s"   ../pyscraper/resolvemembernames.pyt   get_chairman  s    c   	      C   s  |  i  |  |  i |  } |  i | |  } | o |  i | | |  } n t |  d j o |  i |  } n t |  d j o] t i t |  oJ |  i	 o@ |  i |  i	 |  } t |  d j o t
 d |  i	  q n t |  d j o) t i t |  p t
 d |  n d St |  d j ov d } xU | D]M } | | d |  i | d d |  i | d	 d
 |  i | d d 7} q@Wt
 d | | f  d Sx | D] } qW|  i i |  |  i |  } d | | f } | i d d  S(   s  Generates an XML fragment for use in describing a committee member
        in Public Bill Committee Debates. 
        input: A string extracted from a committee member list, expected to be a name
        bracket: A string extracted from a bracket directly following input in the 
            original document
        date: The date of the debate - used to narrow name matches 
        i   i    s$   Couldn't match Committee Chairman %ss   No matches %ss%    memberid="unknown" error="No match" Rt   R.   R-   R/   s    (R0   s   ) s%   Multiple matches %s, possibles are %ss3    memberid="unknown" error="Matched multiple times" s    memberid="%s" membername="%s" t   asciit   xmlcharrefreplace(   R   R   R   R   RH   R   R   R   t
   reChairmanR   R   R   R   R   RF   R   t   encode(	   R   R   R   Rl   Rf   R   R,   R   t   ret(    (    s"   ../pyscraper/resolvemembernames.pyt   matchcttename  s:      0 K c         C   s6  d } |  i  |  } |  i |  |  i | |  } | o |  i  |  } |  i | |  } | o@ d | i   } t |  d j o
 | } q | i |  } n |  i | | |  } n t |  d j o |  i |  } n |  i i	 | d  } | o t |  d j o
 | } n | d j o# |  i i | t    i |  n t |  d j o] t i t |  oJ |  i o@ |  i |  i |  } t |  d j o t d |  i  qn | }	 | o |	 d | d 7}	 n t |  d j oF t i t |  o | o t d |	  n |  i i d  d	 |	 St |  d j o d }
 xM | D]E } |
 |  i | d
 d |  i | d d |  i | d d 7}
 qWWt i t |  p t d |	 |
 f  n |  i i d  d |	 Sx | D] } qW|  i i |  |  i |  } d | | | f } | i d d  S(   s  Match a name from a Public Bill Committee debate and generate an XML 
        fragment for use in a speech tag
        input - name text to be matched
        bracket - extra text extracted from a bracket following the name
        date - date of document input comes from 
        external_speakers - flag indicating that we are expecting external speakers,
        if true, ContextExceptions are not thrown for no matchesRt   s    speakeroffice="%s" i    i   s$   Couldn't match Committee Chairman %ss    (R   s   No matches %ss5   speakerid="unknown" error="No match" speakername="%s"R-   R.   R/   R0   s   ) s%   Multiple matches %s, possibles are %ssC   speakerid="unknown" error="Matched multiple times" speakername="%s"s!   speakerid="%s" speakername="%s"%sR   R   N(   R   R   R   Rw   RH   R   R   R   R   RC   R	   RE   R   R   R   R   R   R   R   R   R   RF   R   R   R   (   R   R   R   Rl   t   external_speakersR   Rf   R   R   R   R   R,   R   R   (    (    s"   ../pyscraper/resolvemembernames.pyt   matchcttedebatename  s`    	
 
#0 	 C	 c         C   s   |  i  i | d   } | p t d |  n d  } xc | D][ } | d | j oD | | d j o3 | o t d | | d | f  n | d } q: q: W| |  i j o t d | | | f  n |  i | S(   Ns   Unknown constituency %sR1   R2   s:   Two like-named constituency ids %s %s overlap with date %sR,   s+   Not known name of consid %s cons %s date %s(   R   RC   R	   RD   R   (   R   RV   Rl   RW   RX   RY   (    (    s"   ../pyscraper/resolvemembernames.pyt   canonicalconsb  s     "c         C   s   |  i  | S(   N(   R   (   R   t   memberid(    (    s"   ../pyscraper/resolvemembernames.pyt	   getmemberp  s    c            sl     i   }   i |   g       f d   } | d d d 
d d  | d d d d d   S(   Nc            s    } x  i  |  } | |  d j o Pn t i t t | | i d     } t i i | i   |  i   } xk  D]F }	  i  |	  }
 |
 | d j o  |
 | | j o |
 d } Pq| q| Wt	 d |  | |  | | f    i
 |  q	 d  S(   Nt   changed_partyR}   R,   s8   Couldn't find %s %s member party changed from %s date %s(   R   Rk   Rl   R   RJ   R   t   fromordinalt	   toordinalRn   RD   RF   (   t   whystrt   datestrt   deltat	   whystrrevt
   datestrrevR,   RS   t   dayendt   dayafterR`   t   mattr(   Rf   R   R   R   (    s"   ../pyscraper/resolvemembernames.pyt
   scanoneway|  s    %" "
	t   towhyR2   i   t   fromwhyR1   i(   R   R   (   R   R   t   personidR   (    (   R   R   Rf   R   s"   ../pyscraper/resolvemembernames.pyt   getmembersoneelectionw  s    	c         C   s   |  i  | S(   N(   R   (   R   R   (    (    s"   ../pyscraper/resolvemembernames.pyt   membertoperson  s    c         C   s  g  } x |  i  | D] } t | d  d j o d | d p | d } t | d  d j o d | d p | d } | | j o" | | j o | i | d  q q Wt |  d j o t d | | f  n t |  d	 j o# t d
 | | d i |  f  n | d S(   NR1   i   s   %s-01-01R2   s   %s-12-31R,   i    s-   Could not find ID for Historic ID %s, date %si   s0   Multiple results for Historic ID %s, date %s: %sRs   (   R   RH   RF   RD   R&   (   R   R4   Rl   Rf   RS   RZ   R[   (    (    s"   ../pyscraper/resolvemembernames.pyt   matchhistoric  s     00#(%   t   __name__t
   __module__R   R   Rg   Rh   Rj   Rp   Ro   R|   RP   R   R   RK   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   RL   R   R   R   R   R   R   (    (    (    s"   ../pyscraper/resolvemembernames.pyR       sB   		+										*.												
				-U				(   t   xml.saxR   R   R   RB   t   sysRk   R$   t   parlphrasesR    t   contextexceptionR   R   R   R%   t   abspathR&   R   t   __file__R'   R   t   handlert   ContentHandlerR   t
   memberList(    (    (    s"   ../pyscraper/resolvemembernames.pyt   <module>   s"   4   
