B
    h}\G                 @   sZ  d dl Zd dlZd dlZd dlZd dlZd dlmZ d dl	Z	d dl
mZ d dlmZmZ e  dd Zddd	d
d
dddZddddddddZde	je	je	jdZi Zx,e	j D ]Ze	je ededd < qW dddddddd d!d"d#
ZG d$d% d%eZd&d' Zd(d) Z d*d+ Z!d,d- Z"d5d.d/Z#g dfd0d1Z$e%d2krVd3d4l&m'Z' e'#  dS )6    N)StringIO)Template)ColorSchemeSymbolColorc             C   s*   dd l }|j|j|| }t| S )Nr   )ospathjoindirnameopenread)resourceZbasefilenamer   fn r   V/home/fristb/BIRCH/lib-linux-x86_64/python/lib/python3.7/site-packages/weblogo/_cgi.pyresource_stringA   s    r   zapplication/postscriptzapplication/pdfzimage/svg+xmlz	image/pngz
text/plainz
image/jpeg)epspdfsvgpng	png_printlogodatajpegr   r   r   r   txtr   )r   r   r   r   r   r   r   )alphabet_autoalphabet_proteinalphabet_rnaalphabet_dnaZcolor_ _noneautoZequiprobable	percentCGz
C. eleganszD. melanogasterzE. coliz
H. sapienszM. musculuszS. cerevisiae)
	comp_none	comp_autocomp_equiprobablecomp_CGcomp_Celeganscomp_Dmelanogaster
comp_Ecolicomp_Hsapienscomp_Mmusculuscomp_Scerevisiaec               @   s"   e Zd ZdZdddZdd ZdS )	Fieldz( A representation of an HTML form field.NIllegal value.c             C   s(   || _ || _|| _|| _|| _|| _d S )N)namedefaultvalue
conversionoptionserrmsg)selfr.   r/   r1   r2   r3   r   r   r   __init__u   s    zField.__init__c             C   sn   | j r&| j| j kr&tt| j| jf| jrdy| | jS  tk
r`   tt| j| jfY qjX n| jS d S )N)r2   r0   
ValueErrorstrr.   r3   r1   )r4   r   r   r   	get_value}   s    zField.get_value)NNNr-   )__name__
__module____qualname____doc__r5   r8   r   r   r   r   r,   r   s   
r,   c             C   s   | d ks| dkrd S t | S )Nr    )r7   )r0   r   r   r   string_or_none   s    r=   c             C   s   | dkrdS t | S )NtrueT)bool)r0   r   r   r   truth   s    r@   c             C   s$   | dks| d ks| dkrd S t | S )N r    )int)r0   r   r   r   int_or_none   s    rC   c             C   s$   | dks| d ks| dkrd S t | S )NrA   r    )float)r0   r   r   r   float_or_none   s    rE   c       "   ,   C   s  t  }tddtddtddt jjddddd	d
dgddtd|jtddtddt jjdddgddtddtjddddgddtdddddd d!d"gd#td$d%t	td&dt	td'dt	td(d)t
jd*d)d+d,d-d.d/d0d1d2g
d3dtd4dtd5dtd6d7ttd8|jtd9|jtd:d7ttd;|jtd<d7ttd=|jttd>|jtd?dtd@|jttdAd7ttdBd7ttdCdDtjt dEdtdFdtdGdtdHdtdIdtdJdtdKdtdLdtdMdtdNdtdOdtdPdtdQdtdRdtdSdtdTdtdUd7ttdVd7tg)}i }x|D ]}|||j< qW t }t|dWksDdX|kr|j|d6 _|j|d: _|j|d< _|j|dA _|j|dB _|j |dV _t!|| dY d S x |D ]}|"|j|j#|_qW dddddd$d&d'd(d6d8d9d:d;d<d=d>d@dAdBdVg}g }xf|D ]^}y&|| $ }	|	d k	rt%|||	 W n0 t&k
rP }
 z|'|
j( W d d }
~
X Y nX qW t) }xt*dWdZD ]}|d[|  $ }|d\|  $ }|d]|  $ }|rjy|j+'t,||| W n, t&k
r   |'d[| d^| f Y nX qjW |dC jd_kr||_-nDy|dC $ |_-W n0 t&k
rJ }
 z|'|
j( W d d }
~
X Y nX d }d`|krd|.d`}|d $ }|d $ }d }d }|r|s|r|'da n|}t/|}n|r|r|'db n8dc}t||kr|'dd tdd|dW< n|}t/|}nj|rbd%del0m1} y||}W n> t&k
r@   |'df Y n  t2k
r^   |'dg Y nX n
|'dh |s|di|krt!|||  d S y|d( $ }|d4 $ }dU|k}|d4krt3|dj }d%dkl4m5} y4|j6||j7dl}t 8||j7}t j9:|j7||}W nD t&k
rH   t j;||j7|dm}t 8||j7}t j9<||}Y nX t =||}|d j} t j|  ||}!W n t&k
r }
 z|'|
j( W d d }
~
X Y n^ t2k
r }
 z|'|
j( W d d }
~
X Y n0 t>k
r }
 z|'|
j( W d d }
~
X Y nX |sdn|kr t!|||  d S t?dot@|   dp|krJt?dqtA|    nt?drtA|    t?  tBjCdW dskrtBjDjEF|! ntBjDF|! d S )tN	sequencesrA   sequences_urlformatr   r   r   r   r   r   r   zUnknown format option.)r2   r3   stacks_per_linez"Invalid number of stacks per line.)r3   Zstack_widthZmediumZsmallZlargezInvalid logo size.alphabetr   r   r   r   zUnknown sequence type.Z	unit_namebitsZprobabilityZnatsZkTzkJ/molzkcal/mol)r2   Zfirst_index   Z
logo_startZlogo_endcompositionr#   r"   r$   r%   r&   r'   r(   r)   r*   r+   zIllegal sequence composition.r!   zInvalid CG percentage.show_errorbarsF
logo_title
logo_label
show_xaxisxaxis_label
show_yaxisyaxis_labelyaxis_scalez*The yaxis scale must be a positive number.yaxis_tic_interval	show_endsshow_fineprintcolor_schemeZ
color_autozUnknown color schemeZcolor0Zsymbols0Zdesc0Zcolor1Zsymbols1Zdesc1Zcolor2Zsymbols2Zdesc2Zcolor3Zsymbols3Zdesc3Zcolor4Zsymbols4Zdesc4ignore_lower_casescale_widthr   Z	cmd_reset)htdocs_directory   zcolor%dz	symbols%dzdesc%dzInvalid color: %scolor_customsequences_file)r_   z'Cannot upload, sequence source conflict)rF   z'Cannot upload, sequence source conflicti )rF   z@Sequence data too large for text input. Use file upload instead.)_from_URL_fileopen)rG   zCannot parse URL)rG   zCannot load sequences from URL)rF   zXPlease enter a multiple-sequence alignment in the box above, or select a file to upload.Zcmd_editd   )Motif)rJ   )rJ   rZ   Zcmd_validatezContent-Type:downloadz3Content-Disposition: attachment; filename="logo.%s"z/Content-Disposition: inline; filename="logo.%s"   )GweblogoZLogoOptionsr,   Z
formattersgetrI   rB   Z	std_sizes	alphabetsrC   rM   rE   r@   rO   rP   rR   rT   r=   rU   rV   color_schemeskeysr.   cgilibZFieldStoragelenrN   r0   rQ   rS   rW   rX   r[   	send_formZgetfirstr/   r8   setattrr6   appendargsr   rangeZrulesr   rY   getvaluer   rA   r`   IOErrorr7   Zmatrixrb   Zread_transfacrJ   Zparse_priorZLogoDataZfrom_countsZread_seq_dataZ	from_seqsZ
LogoFormatRuntimeErrorprint	mime_type	extensionsysversion_infostdoutbufferwrite)"r\   ZlogooptionscontrolsZformcZform_valuesZoptions_from_formerrorsoptnamer0   errZcustomiZcolorsymbolsdescZsequences_from_fileZsequences_from_textfieldrG   rF   Zseq_fileZSEQUENCES_MAXLENGTHr`   compr!   rZ   rb   ZmotifZpriordataZseqsZ
logoformatrH   Zlogor   r   r   main   s`   























$"





	



r   c             C   s&  |d krt jt jtd}i }tj|d< d|d< x| D ]}|jrxx|jD ]}d||dd< qLW d||j	dd< n\|j	}|d krd}|d	krd
||j
< n6t|tkr|rd
||j
< qd||j
< nt|||j
< d||j
d < q:W d|d< tdd kr>tdd kr>d|d< d|d< d|d< d|d< d|d< d|d< tdd krVd|d< |rt|tjd g }xj|D ]b}t|tkr|}	n0t|dkrd||d d < |d }	n|d }	|d7 }||	7 }|d7 }qtW |d7 }d||d < nd|d < td!|}
t|
|}td" t| d S )#NZhtdocsversionrA   r^   /r   selectedr    r>   checkedZ_errZlogo_range_errZgszgswin32c.exezdisabled="disabled"r   r   r   r   r   zselected="selected"r   Zpdf2svg)file   zclass='error'r   rL   zERROR: z <br />ze<input style='float:right; font-size:small' type='submit' name='cmd_validate' value='Clear Error' /> error_messagezcreate_html_template.htmlzContent-Type: text/html

)r   r   r   r	   __file__re   Zrelease_descriptionr2   replacer0   r.   typer?   r7   shutilwhichrt   rw   stderrrk   r   r   safe_substitute)r|   r~   r\   Zsubstitutionsr}   optr0   r   emsgtemplatehtmlr   r   r   rl     sj    

 


rl   __main__rL   )_cli)N)(cgirj   Zcgitbos.pathr   rw   r   ior   re   stringr   Zweblogo.colorschemer   r   enabler   ru   rv   Zunambiguous_protein_alphabetZunambiguous_rna_alphabetZunambiguous_dna_alphabetrg   rh   Zstd_color_schemesri   kr   rM   objectr,   r=   r@   rC   rE   r   rl   r9   rA   r   r   r   r   r   <module>'   sh   

 {S
