
¦Ÿí]0(  ã               @   sâ   d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z y d  d l j Z Wn" e k
 rs d  d l m Z Yn XGd d „  d ƒ Z	 Gd d „  d ƒ Z
 Gd d „  d e ƒ Z d	 d
 „  Z d d „  Z Gd d „  d e
 ƒ Z d S)é    N)ÚStringIOc               @   s¦   e  Z d  Z e j d ƒ Z e j d ƒ Z e j d ƒ Z e j d ƒ Z e j d ƒ Z	 e j d ƒ Z
 e j d ƒ Z e j d ƒ Z e j d	 ƒ Z e j d
 ƒ Z d S)ÚNSzhttp://lv2plug.in/ns/ext/atom#zhttp://drobilla.net/ns/ingen#z$http://drobilla.net/ns/ingen/errors#zhttp://lv2plug.in/ns/lv2core#zhttp://lv2plug.in/ns/ext/patch#zhttp://lv2plug.in/ns/ext/midi#z+http://www.w3.org/1999/02/22-rdf-syntax-ns#z%http://lv2plug.in/ns/ext/resize-port#z!http://www.w3.org/2001/XMLSchema#zhttp://usefulinc.com/ns/doap#N)Ú__name__Ú
__module__Ú__qualname__ÚrdflibZ	NamespaceZatomÚingenÚingerrÚlv2ÚpatchZmidiÚrdfZrszZxsdZdoap© r   r   ú&/mnt/c/git_repos/PolyDigit/UI/ingen.pyr      s   r   c               @   sv   e  Z d  Z d Z d d „  Z d d „  Z d d „  Z d d	 „  Z d
 d „  Z d d „  Z	 d d „  Z
 d d „  Z d S)Ú	InterfacezThe core Ingen interfacec             C   s   d  S)Nr   )ÚselfÚsubjectÚbodyr   r   r   Úput*   s    zInterface.putc             C   s   d  S)Nr   )r   r   ÚremoveÚaddr   r   r   r   -   s    zInterface.patchc             C   s   d  S)Nr   )r   r   r   r   r   Úget0   s    zInterface.getc             C   s   d  S)Nr   )r   r   ÚkeyÚvaluer   r   r   Úset3   s    zInterface.setc             C   s   d  S)Nr   )r   ÚtailÚheadr   r   r   Úconnect6   s    zInterface.connectc             C   s   d  S)Nr   )r   r   r   r   r   r   Ú
disconnect9   s    zInterface.disconnectc             C   s   d  S)Nr   )r   r   r   r   r   Údelete<   s    zInterface.deletec             C   s   d  S)Nr   )r   r   Údestinationr   r   r   Úcopy?   s    zInterface.copyN)r   r   r   Ú__doc__r   r   r   r   r   r   r   r    r   r   r   r   r   (   s   r   c               @   s   e  Z d  Z d d „  Z d S)ÚErrorc             C   s   t  j |  d | | f ƒ d  S)Nz%s; cause: %s)Ú	ExceptionÚ__init__)r   ÚmsgÚcauser   r   r   r$   C   s    zError.__init__N)r   r   r   r$   r   r   r   r   r"   B   s   r"   c              C   sÞ   t  j d ƒ }  |  r |  St j d k rG t  j j d d d d d g ƒ St j d k rl t  j j d d	 g ƒ St j d
 k rÁ t  j j t  j j t  j d ƒ d ƒ t  j j t  j d ƒ d ƒ g ƒ St  j j d d d g ƒ Sd  S)NZLV2_PATHÚdarwinz~/Library/Audio/Plug-Ins/LV2z~/.lv2z/usr/local/lib/lv2z/usr/lib/lv2z/Library/Audio/Plug-Ins/LV2Zhaikuz/boot/common/add-ons/lv2Úwin32ÚAPPDATAZLV2ZCOMMONPROGRAMFILES)ÚosÚgetenvÚsysÚplatformÚpathsepÚjoinÚpath)r0   r   r   r   Úlv2_pathF   s&    

	"r1   c              C   s[   xT t  ƒ  j t j ƒ D]= }  t j j t j j |  d ƒ ƒ } t j j | ƒ r | Sq Wd  S)Nz	ingen.lv2)r1   Úsplitr*   r.   r0   Úabspathr/   Úexists)ÚdÚbundler   r   r   Úingen_bundle_path\   s
    !r7   c               @   s÷   e  Z d  Z d d d „ Z d d „  Z d d „  Z d d	 „  Z d
 d „  Z d d „  Z d d „  Z	 d d „  Z
 d d „  Z d d „  Z d d „  Z d d „  Z d d „  Z d d „  Z d d „  Z d  d! „  Z d" d# „  Z d$ d% „  Z d& d' „  Z d( S))ÚRemotezunix:///tmp/ingen.sockc             C   s£  d |  _  | d |  _ t j ƒ  |  _ t j j |  j ƒ |  _ |  j j d |  j ƒ x? t	 j
 j ƒ  D]. \ } } | j d ƒ sc |  j j | | ƒ qc W| j d ƒ râ t j t j t j ƒ |  _ |  j j | t d ƒ d  … ƒ n‰ | j d ƒ r[t j t j t j ƒ |  _ t j d | t d ƒ d  … ƒ } | d t | d ƒ f } |  j j | ƒ n t d	 | ƒ ‚ t ƒ  } | rŸ|  j j t j j | d
 ƒ d d ƒd  S)Né   ú/ÚserverZ__zunix://ztcp://z[:/]r   zUnsupported server URI `%sz
errors.ttlÚformatÚn3)Zmsg_idÚserver_baser   ÚGraphÚmodelÚ	namespaceZNamespaceManagerÚ
ns_managerÚbindr   Ú__dict__ÚitemsÚ
startswithÚsocketZAF_UNIXZSOCK_STREAMÚsockr   ÚlenZAF_INETÚrer2   Úintr#   r7   Úparser*   r0   r/   )r   ÚuriÚkÚvZparsedZaddrr6   r   r   r   r$   d   s(    	#"	zRemote.__init__c             C   s   |  j  j ƒ  d  S)N)rH   Úclose)r   r   r   r   Ú__del__}   s    zRemote.__del__c             C   s>   d } x1 |  j  j ƒ  D]  \ } } | d | | f 7} q W| S)NÚ z@prefix %s: <%s> .
)rB   Z
namespaces)r   ÚsrN   rO   r   r   r   Ú_get_prefixes_string€   s    zRemote._get_prefixes_stringc             C   s(   t  j d d k r  t | d ƒ S| Sd  S)Nr   é   zutf-8)r,   Úversion_infoÚbytes)r   r%   r   r   r   Ú	msgencode†   s    zRemote.msgencodec             C   s½   x¶ | j  d  t j j t j j g ƒ D]� } | d } | j | t j j d  ƒ } | j | t j j d  ƒ } i  } xA | j  | d  d  g ƒ D]' } |  j	 j
 | | d | d g ƒ qŠ Wq% W| S)Nr   r9   é   )Útriplesr   r   Útyper   ÚPutr   r   r   r@   r   )r   ÚupdateÚir   r   r   Zdescr   r   r   Úupdate_modelŒ   s    +
)zRemote.update_modelc             C   s7   | } | j  |  j ƒ r3 | t |  j ƒ d d  … S| S)Nr9   )rF   r>   rI   )r   rM   r0   r   r   r   Úuri_to_path–   s    zRemote.uri_to_pathc             C   sQ   d } xD |  j  j d d ƒ } | s5 | d d k r6 P| | j d ƒ 7} q	 W| S)z4Read from socket until a null terminator is receivedrR   r9   r   zutf-8)rH   ÚrecvÚdecode)r   r%   Zchunkr   r   r   ra   œ   s    zRemote.recvc                sI   ‡  f d d †  ‰  | g } x' | j  ˆ  | ƒ D] } | | g 7} q. W| S)Nc             3   sj   xc | j  |  d  d  g ƒ D]I } t | d ƒ t j k r | d |  k r | d Vˆ  | d | ƒ q Wd  S)NrY   )rZ   r[   r   ZBNode)ÚnodeÚgr^   )Ú
blank_walkr   r   re   ©   s    )	z(Remote.blank_closure.<locals>.blank_walk)ZtransitiveClosure)r   Zgraphrc   ZclosureÚbr   )re   r   Úblank_closure¨   s
    	zRemote.blank_closurec             C   sŠ   |  j  j d  t j j t j | ƒ ƒ } | s@ t d | | ƒ ‚ |  j  j | t j j d  ƒ } | sw t d | | ƒ ‚ t | | ƒ ‚ d  S)Nzerror %dz%s)	r@   r   r   r	   Z	errorCoder   ZLiteralr"   ZformatString)r   Úcoder&   ÚklassZfmtr   r   r   Úraise_errorµ   s    'zRemote.raise_errorc             C   sE   | } t  j d d k r( t | d ƒ } |  j j |  j | ƒ ƒ d  S)Nr   rU   zutf-8)r,   rV   rW   rH   ÚsendrX   )r   r%   Zpayloadr   r   r   rk   À   s    zRemote.sendc             C   s  t  j d |  j ƒ } | j t | ƒ d d d ƒx� | j d ƒ D]p } | j d ƒ rA t j d | ƒ } | rA | j	 d ƒ } | j	 d	 ƒ } |  j j
 | j	 d ƒ | j	 d	 ƒ ƒ qA Wg  } g  } x¨ | j d  t j j t j j g ƒ D]‚ }	 |	 d
 }
 | j |
 t j j d  ƒ } | j |
 t j j d  ƒ } | |	 g 7} | |
 g 7} | d
 k ræ |  j t | ƒ t ƒ qæ Wg  } x$ | D] } | |  j | | ƒ 7} qyWx> | D]6 } x- | j | d  d  g ƒ D] } | j | ƒ q¿Wq Wx | D] }	 | j |	 ƒ qáW|  j | ƒ S)NZnamespace_managerzingen:/r<   r=   Ú
z@prefixz@prefix ([^:]*): <(.*)> *\.r9   rY   r   )r   r?   rB   rL   r   r2   rF   rJ   ÚsearchÚgrouprC   rZ   r   r   r[   r   ZResponser   r   r   rj   rK   r%   rg   r   r_   )r   Zresponse_strZresponse_modelÚlineÚmatchÚnamerM   ZblanksZresponse_descr^   Úresponser   r   rg   rf   Útr   r   r   Úparse_responseÊ   s8    )+
zRemote.parse_responsec             C   s   |  j  d | ƒ S)Nz)
[]
	a patch:Get ;
	patch:subject <%s> .
)rk   )r   r   r   r   r   r   ú   s    z
Remote.getc             C   s   |  j  d | | f ƒ S)Nz?
[]
	a patch:Put ;
	patch:subject <%s> ;
	patch:body [
%s
	] .
)rk   )r   r   r   r   r   r   r     s    z
Remote.putc             C   s   |  j  d | | | f ƒ S)NzX
[]
	a patch:Patch ;
	patch:subject <%s> ;
	patch:remove [
%s
	] ;
	patch:add [
%s
	] .
)rk   )r   r   r   r   r   r   r   r     s    
zRemote.patchc             C   s   |  j  d | | | f ƒ S)NzU
[]
	a patch:Set ;
	patch:subject <%s> ;
	patch:property <%s> ;
    patch:value %s .
)rk   )r   r   r   r   r   r   r   r     s    z
Remote.setc             C   s,   |  j  d t j j | | g ƒ | | f ƒ S)Nzt
[]
	a patch:Put ;
	patch:subject <%s> ;
	patch:body [
		a ingen:Arc ;
		ingen:tail <%s> ;
		ingen:head <%s> ;
	] .
)rk   r*   r0   Úcommonprefix)r   r   r   r   r   r   r   !  s    	zRemote.connectc             C   s   |  j  d | | f ƒ S)Nza
[]
	a patch:Delete ;
	patch:body [
		a ingen:Arc ;
		ingen:tail <%s> ;
		ingen:head <%s> ;
	] .
)rk   )r   r   r   r   r   r   r   -  s    zRemote.disconnectc             C   s   |  j  d | ƒ S)Nz,
[]
	a patch:Delete ;
	patch:subject <%s> .
)rk   )r   r   r   r   r   r   8  s    zRemote.deletec             C   s   |  j  d | | f ƒ S)NzD
[]
	a patch:Copy ;
	patch:subject <%s> ;
	patch:destination <%s> .
)rk   )r   r   r   r   r   r   r    ?  s    zRemote.copyN)r   r   r   r$   rQ   rT   rX   r_   r`   ra   rg   rj   rk   rt   r   r   r   r   r   r   r   r    r   r   r   r   r8   c   s&   

0
	r8   )r*   r   rJ   rG   r,   ZStringIO.StringIOr   ÚImportErrorÚior   r   r#   r"   r1   r7   r8   r   r   r   r   Ú<module>   s   