3
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j  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j D ]Ze	je edej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'j#  dS )6    N)StringIO)Template)ColorSchemeSymbolColorc             C   s*   dd l }|jj|jj|| }t|j S )Nr   )ospathjoindirnameopenread)resourceZbasefilenamer   fn r   >/home/birch/.local/lib/python3.6/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   Ztxtr   )r   r   r   r   r   r   r   )alphabet_autoalphabet_proteinalphabet_rnaalphabet_dnaZcolor_ _Z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-   r/   r0   r1   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| jS  tk
r`   tt| j| jfY qjX n| jS d S )N)r0   r.   
ValueErrorstrr,   r1   r/   )r2   r   r   r   	get_value}   s    zField.get_value)NNNr+   )__name__
__module____qualname____doc__r3   r6   r   r   r   r   r*   r   s   
r*   c             C   s   | d ks| dkrd S t | S )Nr   )r5   )r.   r   r   r   string_or_none   s    r;   c             C   s   | dkrdS t | S )NtrueT)bool)r.   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)r.   r   r   r   int_or_none   s    rA   c             C   s$   | dks| d ks| dkrd S t | S )Nr?   r   )float)r.   r   r   r   float_or_none   s    rC   c       "   ,   C   s  t j }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j 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j }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|j#|_qW dddddd$d&d'd(d6d8d9d:d;d<d=d>d@dAdBdVg}g }xf|D ]^}y&|| j$ }	|	d k	rt%|||	 W n0 t&k
rP }
 z|j'|
j( W Y d d }
~
X nX qW t) }xt*dWdZD ]}|d[|  j$ }|d\|  j$ }|d]|  j$ }|rjy|j+j't,||| W n, t&k
r   |j'd[| d^| f Y nX qjW |dC jd_kr||_-nDy|dC j$ |_-W n0 t&k
rJ }
 z|j'|
j( W Y d d }
~
X nX d }d`|krd|j.d`}|d j$ }|d j$ }d }d }|r|s|r|j'ds n|}t/|}n|r|r|j'dt n8db}t||kr|j'du tdd|dW< n|}t/|}nj|rbd%ddl0m1} y||}W n> t&k
r@   |j'dv Y n  t2k
r^   |j'dw Y nX n
|j'dx |s|dh|krt!|||  d S y|d( j$ }|d4 j$ }dU|k}|d4krt3|di }d%djl4m5} y4|j6||j7dk}t j8||j7}t j9j:|j7||}W nD t&k
rH   t j;||j7|dl}t j8||j7}t j9j<||}Y nX t j=||}|d j} t j|  ||}!W n t&k
r }
 z|j'|
j( W Y d d }
~
X n^ t2k
r }
 z|j'|
j( W Y d d }
~
X n0 t>k
r }
 z|j'|
j( W Y d d }
~
X nX |sdm|kr t!|||  d S t?dnt@|   do|krJt?dptA|    nt?dqtA|    t?  tBjCdW drkrtBjDjEjF|! ntBjDjF|! d S )yN	sequencesr?   sequences_urlformatr   r   r   r   r   r   r   zUnknown format option.)r0   r1   stacks_per_linez"Invalid number of stacks per line.)r1   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)r0   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'Cannot upload, sequence source conflicti @Sequence data too large for text input. Use file upload instead.)_from_URL_fileopenCannot parse URLCannot load sequences from URLXPlease enter a multiple-sequence alignment in the box above, or select a file to upload.Zcmd_editd   )Motif)rH   )rH   rX   Zcmd_validatezContent-Type:Zdownloadz3Content-Disposition: attachment; filename="logo.%s"z/Content-Disposition: inline; filename="logo.%s"   )r]   r^   )rD   r^   )rD   r_   )rE   ra   )rE   rb   )rD   rc   )GweblogoZLogoOptionsr*   Z
formattersgetrG   r@   Z	std_sizes	alphabetsrA   rK   rC   r>   rM   rN   rP   rR   r;   rS   rT   color_schemeskeysr,   cgilibZFieldStoragelenrL   r.   rO   rQ   rU   rV   rY   	send_formZgetfirstr-   r6   setattrr4   appendargsr   rangeZrulesr   rW   getvaluer   r?   r`   IOErrorr5   Zmatrixre   Zread_transfacrH   Zparse_priorZLogoDataZfrom_countsZread_seq_dataZ	from_seqsZ
LogoFormatRuntimeErrorprint	mime_type	extensionsysversion_infostdoutbufferwrite)"rZ   ZlogooptionscontrolsZformcZform_valuesZoptions_from_formerrorsoptnamer.   errZcustomiZcolorsymbolsdescZsequences_from_fileZsequences_from_textfieldrE   rD   Zseq_fileZSEQUENCES_MAXLENGTHr`   compr   rX   re   ZmotifZpriordataZseqsZ
logoformatrF   Zlogor   r   r   main   sd   























$"







r   c             C   s&  |d krt jjt jjtd}i }tj|d< d|d< x| D ]}|jrxx|jD ]}d||jdd< qLW d||j	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jdd kr>tjdd kr>d|d< d|d< d|d< d|d< d|d< d|d< tj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j||d < nd|d < td!|}
t|
j|}td" t| d S )#NZhtdocsversionr?   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   rJ   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__rg   Zrelease_descriptionr0   replacer.   r,   typer=   r5   shutilwhichrv   ry   stderrrm   r   r   safe_substitute)r~   r   rZ   Zsubstitutionsr   optr.   r   emsgtemplatehtmlr   r   r   rn     sj    

 


rn   __main__rJ   )_cli)N)(cgirl   Zcgitbos.pathr   ry   r   ior   rg   stringr   Zweblogo.colorschemer   r   enabler   rw   rx   Zunambiguous_protein_alphabetZunambiguous_rna_alphabetZunambiguous_dna_alphabetri   rj   Zstd_color_schemesrk   kr   rK   objectr*   r;   r>   rA   rC   r   rn   r7   r?   r   r   r   r   r   <module>'   sh   

 {S
