
»¸Ø]¬&  ã               @   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 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://www.w3.org/1999/02/22-rdf-syntax-ns#z%http://lv2plug.in/ns/ext/resize-port#z!http://www.w3.org/2001/XMLSchema#N)Ú__name__Ú
__module__Ú__qualname__ÚrdflibZ	NamespaceZatomÚingenÚingerrZlv2ÚpatchÚrdfZrszZxsd© r   r   ú,/mnt/c/git_repos/PolyDigit/UI/ingen/ingen.pyr      s   r   c               @   sj   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 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   Úget.   s    zInterface.getc             C   s   d  S)Nr   )r   r   ÚkeyÚvaluer   r   r   Úset1   s    zInterface.setc             C   s   d  S)Nr   )r   ÚtailÚheadr   r   r   Úconnect4   s    zInterface.connectc             C   s   d  S)Nr   )r   r   r   r   r   r   Ú
disconnect7   s    zInterface.disconnectc             C   s   d  S)Nr   )r   r   r   r   r   Údelete:   s    zInterface.deleteN)r   r   r   Ú__doc__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!   >   s    zError.__init__N)r   r   r   r!   r   r   r   r   r   =   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)r-   r   r   r   Úlv2_pathA   s&    

	"r.   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)r.   Úsplitr'   r+   r-   Úabspathr,   Úexists)ÚdÚbundler   r   r   Úingen_bundle_pathW   s
    !r4   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$ 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Úrer/   Úintr    r4   Úparser'   r-   r,   )r   ÚuriÚkÚvZparsedZaddrr3   r   r   r   r!   _   s(    	#"	zRemote.__init__c             C   s   |  j  j ƒ  d  S)N)rE   Úclose)r   r   r   r   Ú__del__x   s    zRemote.__del__c             C   s>   d } x1 |  j  j ƒ  D]  \ } } | d | | f 7} q W| S)NÚ z@prefix %s: <%s> .
)r?   Z
namespaces)r   ÚsrK   rL   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   r6   é   )Útriplesr   r   Útyper
   Z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)Nr6   )rC   r;   rF   )r   rJ   r-   r   r   r   Úuri_to_path‘   s    zRemote.uri_to_pathc             C   s^   d } xQ |  j  j d d ƒ j d ƒ } | sD t | d ƒ d k rH Pq	 | | d 7} q	 W| S)z4Read from socket until a null terminator is receivedrO   r6   r   zutf-8)rE   ÚrecvÚdecodeÚord)r   r"   Úcr   r   r   r]   —   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)NrV   )rW   rX   r   ZBNode)ÚnodeÚgrZ   )Ú
blank_walkr   r   rc   £   s    )	z(Remote.blank_closure.<locals>.blank_walk)ZtransitiveClosure)r   Zgraphra   ZclosureÚbr   )rc   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#   ZklassZfmtr   r   r   Úraise_error¯   s    'zRemote.raise_errorc             C   s`  | } t  j d d k r( t | d ƒ } |  j j |  j | ƒ ƒ |  j ƒ  |  j ƒ  } | St j	 d |  j
 ƒ } | j t | ƒ d d d ƒx� | j d ƒ D]p } | j d	 ƒ rœ t j d
 | ƒ } | rœ | j d ƒ } | j d ƒ } |  j
 j | j d ƒ | j d ƒ ƒ qœ 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 rA|  j t | ƒ | ƒ qAWg  } x$ |	 D] } | |  j | | ƒ 7} qÔWx> | D]6 } x- | j | d  d  g ƒ D] } | j | ƒ qWqûWx |
 D] } | j | ƒ q<W|  j  | ƒ S)Nr   rR   zutf-8Znamespace_managerzingen:/r9   r:   Ú
z@prefixz@prefix ([^:]*): <(.*)> *\.r6   rV   )!r)   rS   rT   rE   ÚsendrU   rQ   r]   r   r<   r?   rI   r   r/   rC   rG   ÚsearchÚgroupr@   rW   r   r   rX   r
   ZResponser   r   r   rg   rH   re   r   r[   )r   r"   ZpayloadZresponse_strZresponse_modelÚlineÚmatchÚnamerJ   ZblanksZresponse_descrZ   Zresponser   r   re   rd   Útr   r   r   ri   º   sD    )+
zRemote.sendc             C   s   |  j  d | ƒ S)Nz)
[]
	a patch:Get ;
	patch:subject <%s> .
)ri   )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
	] .
)ri   )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
	] .
)ri   )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 .
)ri   )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> ;
	] .
)ri   r'   r-   Ú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> ;
	] .
)ri   )r   r   r   r   r   r   r   &  s    zRemote.disconnectc             C   s   |  j  d | ƒ S)Nz,
[]
	a patch:Delete ;
	patch:subject <%s> .
)ri   )r   r   r   r   r   r   1  s    zRemote.deleteN)r   r   r   r!   rN   rQ   rU   r[   r\   r]   re   rg   ri   r   r   r
   r   r   r   r   r   r   r   r   r5   ^   s"   
9
	r5   )r'   r   rG   rD   r)   ZStringIO.StringIOr   ÚImportErrorÚior   r   r    r   r.   r4   r5   r   r   r   r   Ú<module>   s   
