Ñò
lGÔLc           @   sc  d  d k  l Z d  d k Z d  d k Z d  d k l Z d  d k l Z yR y d  d k Z	 Wn; e
 j
 o/ Z e i d j o d  d k	 Z	 q™ e ‚ n XWn• e
 j
 o‰ e i d IJe i d IJe i d IJe i d	 IJe i d
 IJe i d IJe i d IJe i d IJe i d IJe i d ƒ n Xd „  Z d e f d „  ƒ  YZ d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z h e g  f d 6e g  f d 6e g  f d 6e g  f d 6Z d  „  Z d! d- d" „  ƒ  YZ d# d. d$ „  ƒ  YZ d% e f d& „  ƒ  YZ d' e f d( „  ƒ  YZ  d) e f d* „  ƒ  YZ! d+ „  Z" d, „  Z# d S(/   iÿÿÿÿ(   t   nested_scopesN(   t   remove(   t   OptionParserið s1    You don't appear to have simplejson.py installeds;    (an implementation of a JSON reader and writer in Python).s    You can install it:sL      - by running 'apt-get install python-simplejson' on Debian-based systems,sI      - by running 'yum install python-simplejson' on Fedora/Red Hat system,sB      - by running 'port install py25-simplejson' on Macports on OS Xs<        (you may need to say 'make PYTHON=python2.5', as well),s?      - from sources from 'http://pypi.python.org/pypi/simplejson'sG      - simplejson is a standard json library in the Python core since 2.6i   c      	   C   s:   x3 d d d d d d d d d	 g	 D] } | |  | <q" Wd  S(
   Nt   octett   shortstrt   longstrt   shortt   longt   longlongt   bitt   tablet	   timestamp(    (   t   dt   t(    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyt   insert_base_types:   s     t   AmqpSpecFileMergeConflictc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyR   ?   s    c         C   s<   | d  j p | | j p | o | St |  | | ƒ ‚ d  S(   N(   t   NoneR   (   t   keyt   acct   newt   ignore_conflicts(    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyt   default_spec_value_mergerE   s    !c         C   s   | | g S(   N(    (   R   R   R   R   (    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyt   extension_info_mergerK   s    c         C   s™   t  d „  | Dƒ ƒ } xO | D]G \ } } | i | ƒ o! | p t |  | | ƒ ‚ qd q | | | <q Wg  } | i ƒ  D] \ } } | | | g qy ~ S(   Nc         s   s%   x |  ] \ } } | | f Vq Wd  S(   N(    (   t   .0t   kt   v(    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pys	   <genexpr>O   s   	 (   t   dictt   has_keyR   t	   iteritems(   R   R   R   R   t   mergedR   R   t   _[1](    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyt   domains_mergerN   s     c            s|   t  ‡  f d †  | Dƒ ƒ } t | ƒ } xM | D]E } | ˆ  | j o! | p t t | | ƒ ‚ qt q/ | i | ƒ q/ W| S(   Nc         3   s   x |  ] } | ˆ  Vq Wd  S(   N(    (   R   R   (   t   dict_key(    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pys	   <genexpr>Z   s   	 (   t   sett   listR   t   descriptiont   append(   R"   R   R   R   t	   acc_indext   resultR   (    (   R"   s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyt   merge_dict_lists_byY   s     c         C   s   t  d | | | ƒ S(   Nt   name(   R)   (   R   R   R   R   (    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyt   constants_mergerd   s    c         C   s   t  d | | | ƒ S(   NR*   (   R)   (   t	   classnameR   R   R   (    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyt   methods_mergerg   s    c         C   s   t  d | | | ƒ S(   NR*   (   R)   (   R,   R   R   R   (    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyt   properties_mergerj   s    c         C   s^   t  |  d |  d | d | ƒ |  d <t |  d |  i d g  ƒ | i d g  ƒ | ƒ |  d <d  S(   NR*   t   methodst
   properties(   R-   R.   t   get(   R   R   R   (    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyt   class_mergerm   s    

c         C   sq   t  d „  | Dƒ ƒ } t | ƒ } xH | D]@ } | d | j o t | | d | | ƒ q) | i | ƒ q) W| S(   Nc         s   s#   x |  ] } | d  | f Vq Wd S(   R*   N(    (   R   R   (    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pys	   <genexpr>x   s   	 R*   (   R   R$   R2   R&   (   R   R   R   R   t   acc_dictR(   t   w(    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyt   classes_mergerw   s     t	   extensiont   domainst	   constantst   classesc         C   sç   g  } |  D] } | t  | ƒ q ~ } g  } | D] } | t i | ƒ q2 ~ } h  } xn | D]f }	 x] |	 i ƒ  D]O \ }
 } t i |
 t d  f ƒ \ } } | |
 | i |
 | ƒ | | ƒ | |
 <qq Wq^ Wx | D] } | i ƒ  qÏ W| S(   N(	   t   filet   jsont   loadR   t   mergersR1   R   R   t   close(   t	   filenamesR   R    t   filenamet   handlest   _[2]t   handlet   docst   spect   docR   t   valuet   mergert   default_value(    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyt   merge_load_specsˆ   s    '*  -  t   AmqpSpecc           B   s2   e  Z e Z d  „  Z d „  Z d „  Z d „  Z RS(   c      	   C   sY  t  | t i ƒ |  _ |  i d |  _ |  i d |  _ |  i i d ƒ o |  i d p d |  _ |  i d |  _ h  |  _	 t
 |  i	 ƒ x* |  i d D] } | d |  i	 | d <q“ Wg  |  _ xZ |  i d D]K } | i d	 ƒ o | d	 } n d
 } |  i i | d | d | f ƒ qÉ Wg  |  _ x1 |  i d D]" } |  i i t |  i | ƒ ƒ q/Wd  S(   Ns   major-versions   minor-versiont   revisioni    t   portR7   i   R8   t   classt    R*   RG   R9   (   RJ   RK   R   RE   t   majort   minorR   RL   RM   R7   R   R8   R&   R9   t	   AmqpClass(   t   selfR?   t   entryR   t   klasst   element(    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyt   __init__˜   s*    *	 	 %	 c         C   s   |  i  S(   N(   R9   (   RS   (    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyt
   allClasses±   s    c         C   s5   g  } |  i  D]  } | i ƒ  D] } | | q q ~ S(   N(   R9   t
   allMethods(   RS   R    t   ct   m(    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyRY   ´   s    c         C   s   |  i  | S(   N(   R7   (   RS   t   n(    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyt   resolveDomain·   s    (   R   R   t   FalseR   RW   RX   RY   R]   (    (    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyRK   “   s
   			t
   AmqpEntityc           B   s   e  Z d  „  Z RS(   c         C   s   | |  _  | d |  _ d  S(   NR*   (   RV   R*   (   RS   RV   (    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyRW   »   s    	(   R   R   RW   (    (    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyR_   º   s   RR   c           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c      
   C   s  t  i |  | ƒ | |  _ t |  i d ƒ |  _ g  |  _ x. |  i d D] } |  i i t |  | ƒ ƒ qF Wt	 |  _
 x) |  i D] } | i o t |  _
 Pq| q| Wg  |  _ |  i i d ƒ oH d } x? |  i d D], } |  i i t |  | | ƒ ƒ | d } qÎ Wn d  S(   Nt   idR/   R0   i    i   (   R_   RW   RE   t   intRV   t   indexR/   R&   t
   AmqpMethodR^   t   hasContentPropertiest
   hasContentt   Truet   fieldsR   t	   AmqpField(   RS   RE   RV   t   method_elementt   methodRb   t   e(    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyRW   À   s(    		 	
 
			 c         C   s   |  i  S(   N(   R/   (   RS   (    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyRY   Ö   s    c         C   s   d |  i  d S(   Ns   AmqpClass("s   ")(   R*   (   RS   (    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyt   __repr__Ù   s    (   R   R   RW   RY   Rl   (    (    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyRR   ¿   s   		Rc   c           B   s   e  Z d  „  Z d „  Z RS(   c         C   sÝ   t  i |  | ƒ | |  _ t |  i d ƒ |  _ |  i i d ƒ o |  i d |  _ n
 t |  _ |  i i d ƒ o |  i d |  _	 n
 t |  _	 g  |  _
 d } x8 | d D], } |  i
 i t |  | | ƒ ƒ | d } q© Wd  S(   NR`   t   synchronoust   contenti    t	   argumentsi   (   R_   RW   RU   Ra   RV   Rb   R   t   isSynchronousR^   Re   Ro   R&   Rh   (   RS   RU   RV   Rb   t   argument(    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyRW   Ý   s    				 c         C   s.   d |  i  i d |  i d t |  i ƒ d S(   Ns   AmqpMethod("t   .s   " t   )(   RU   R*   t   reprRo   (   RS   (    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyRl   ð   s    (   R   R   RW   Rl   (    (    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyRc   Ü   s   	Rh   c           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   t  i |  | ƒ | |  _ | |  _ |  i i d ƒ o |  i d |  _ n |  i d |  _ |  i i d ƒ o |  i d |  _ n
 d  |  _ d  S(   Nt   typet   domains   default-value(	   R_   RW   Rj   Rb   RV   R   Rv   t   defaultvalueR   (   RS   Rj   RV   Rb   (    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyRW   ô   s    		c         C   s   d |  i  d S(   Ns   AmqpField("s   ")(   R*   (   RS   (    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyRl     s    (   R   R   RW   Rl   (    (    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyRh   ó   s   	c         C   s   t  h |  d 6| d 6ƒ d  S(   Nt   headert   body(   t   do_main_dict(   t	   header_fnt   body_fn(    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyt   do_main  s    c   	   	      sê   ‡  f d †  } d „  } t  ƒ  } | i d d d d d d t ƒ| i ƒ  \ } } t | ƒ d	 j  o | ƒ  t i d
 ƒ nj | d } | d
 d !} | d } | i t _ ˆ  i	 | ƒ o | ˆ  | | | ƒ n | ƒ  t i d
 ƒ d  S(   Nc             sd   t  i d IJt  i d t  i d IJt  i d d i g  }  ˆ  i ƒ  D] } |  | qF ~  ƒ IJd  S(   Ns   Usage:sA     %s <function> <path_to_amqp_spec.json>... <path_to_output_file>i    s    where <function> is one of %ss   , (   t   syst   stderrt   argvt   joint   keys(   R    R   (   t   funcDict(    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyt   usage
  s    c      	   S   se   t  i } t | d ƒ } z2 y | t  _ |  | ƒ Wn t | ƒ ‚  n XWd  | t  _ | i ƒ  Xd  S(   NR4   (   R~   t   stdoutt   openR   R>   (   t   fnt
   amqp_specst   out_fileR…   t   f(    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyt   execute  s    		
	s   --ignore-conflictst   actiont
   store_truet   destR   t   defaulti   i   i    iÿÿÿÿ(
   R   t
   add_optionR^   t
   parse_argst   lenR~   t   exitR   RK   R   (	   Rƒ   R„   R‹   t   parsert   optionst   argst   functiont   sourcesRŽ   (    (   Rƒ   s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyRz   	  s     		

(    (    ($   t
   __future__R    t   reR~   t   osR   t   optparseR   t
   simplejsonR;   t   ImportErrorRk   t
   hexversionR   R“   R   t	   ExceptionR   R   R   R!   R)   R+   R-   R.   R2   R5   R=   RJ   RK   R_   RR   Rc   Rh   R}   Rz   (    (    (    s;   /home/mordred/src/librabbitmq/trunk/codegen/amqp_codegen.pyt   <module>    s\   									
	
	'	