a
    .bv                     @   s  d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	m
Z
mZmZ ddlmZmZmZ ddlmZmZmZ ddlmZ dd	lmZmZ d
ZdZdZdZeeef dddZe Z dd Z!dd Z"G dd dZ#G dd dZ$G dd deZ%eeefddZ&e'dkre&  dS )u%   
Dépend de websites_test_framework.
    N)unescape)TracebackType)ListTypeOptionalTupleDict)WebsiteTestrun_and_collecttest)CssErrorCssSimpleParserlooks_like_css_code)detect_encoding)HTMLWebFile
CSSWebFilez$/home/nicolas/R102/rendus/*/www/R102zF/home/nicolas/Travail/enseignements/S1/R102 - developpement web/rendusz/R102z(/home/nicolas/R102/rendus/TBFCT1-210.csvreturnc                  C   s   i } t t}|dkr$tdt dtt|dF}t|D ]*}|^}}}}|dkr<| d| | |< q<W d    n1 s|0    Y  | S )NbinaryzFile z isn't correctly encoded(not utf8 nor latin1 nor any known encoding !)
Try to open it with libreoffice, remove wrong characters, save it and then relaunch this script.)encodingZnom )r   STUDENTS_LOGINSRuntimeErroropencsvreader)Zloginsr   frownameZsurnamelogin_ r!   a/home/manager/.local/lib/python3.9/site-packages/websites_test_framework/scripts/evaluate_R102.py
get_logins    s    
2r#   c                 C   s   dd | j D S )Nc                 S   s   g | ]}|j r|j qS r!   r   ).0childr!   r!   r"   
<listcomp>6       zchild_names.<locals>.<listcomp>)children)elementr!   r!   r"   child_names5   s    r+   c                 C   s^   d}g }| D ]F}|dkr(d}| | q|dkrD|r8d}| | q|r| | qd|S )NF<T> )appendjoin)stagcontentcharr!   r!   r"   remove_text_between_tags9   s    r5   c                   @   s   e Zd ZddedddZedddZedddZed	d
dZed	ddZ	ed	ddZ
ed	ddZed	ddZdd ZedddZeeeee f dddZdd ZdS )Scorer   valuec                C   s   || _ || _g | _d S N)maxr8   _log)selfr:   r8   r!   r!   r"   __init__K   s    zScore.__init__c                 C   s   |  j |7  _ |   | S r9   r8   _testr<   r8   r!   r!   r"   __iadd__P   s    zScore.__iadd__c                 C   s   |  j |8  _ |   | S r9   r>   r@   r!   r!   r"   __isub__U   s    zScore.__isub__)otherc                 C   s
   | j |kS r9   r7   r<   rC   r!   r!   r"   __eq__Z   s    zScore.__eq__c                 C   s
   | j |k S r9   r7   rD   r!   r!   r"   __lt__]   s    zScore.__lt__c                 C   s
   | j |kS r9   r7   rD   r!   r!   r"   __le__`   s    zScore.__le__c                 C   s
   | j |kS r9   r7   rD   r!   r!   r"   __gt__c   s    zScore.__gt__c                 C   s
   | j |kS r9   r7   rD   r!   r!   r"   __ge__f   s    zScore.__ge__c                 C   s"   | j | jkrtd| j  dd S )Nz!Score.maximal should be at least .)r8   r:   r   r<   r!   r!   r"   r?   i   s    zScore._test)msgc                 C   s   | j | d S r9   )r;   r/   )r<   rL   r!   r!   r"   logm   s    z	Score.logr   c                 C   s   | j | j | jfS r9   )r8   r:   r;   rK   r!   r!   r"   ratio_and_logp   s    zScore.ratio_and_logc                 C   s   d| j  d| j dS )NzScore(/))r8   r:   rK   r!   r!   r"   __str__t   s    zScore.__str__N)__name__
__module____qualname__floatr=   rA   rB   objectrE   rF   rG   rH   rI   r?   strrM   propertyr   r   rN   rQ   r!   r!   r!   r"   r6   J   s   r6   c                   @   sV   e Zd Zeee dddZddddZeee  ee ee	 ee
 dd	d
ZdS )CatchExceptions)score
exceptionsc                 G   s   |j | _ || _d S r9   )rM   r[   )r<   rZ   r[   r!   r!   r"   r=   y   s    zCatchExceptions.__init__Nr   c                 C   s   d S r9   r!   rK   r!   r!   r"   	__enter__}   s    zCatchExceptions.__enter__)exc_type	exc_value	tracebackr   c                 C   s6   |d ur2t || jr2tt| } | | dS d S )NT)
issubclassr[   printrW   rM   )r<   r]   r^   r_   rL   r!   r!   r"   __exit__   s
    
zCatchExceptions.__exit__)rR   rS   rT   r6   r   BaseExceptionr=   r\   r   r   boolrb   r!   r!   r!   r"   rY   x   s   
rY   c                   @   sT  e Zd Zdd Zeddddd Zedddd	d
 Zeddddd Zeddddd Zeddddd Z	eddddd Z
eddddd Zeddddd Zed d!dd"d# Zed$ddd%d& Zed'ddd(d) Zed*d+dd,d- Zed.ddd/d0 Zed1ddd2d3 Zed4ddd5d6 Zed7ddd8d9 Zd:S );R102WebsiteTestc                 C   s&   | j jjj}|tv sJ |t| gS r9   )pathparentr   LOGINS_DICT)r<   r   r!   r!   r"   get_authors   s    zR102WebsiteTest.get_authorszFiles hierarchy   )titleweightc                 C   s   t dd}dD ]Z}| j| }| r,|d7 }|d  r@|d7 }|d  rT|d7 }|d  r|d7 }q| jd  r|d7 }| jd  r|d7 }| jd  r|d7 }|jS )	N   r:   )ZTD1ZTD2ZTD3TD4ZTD5rj   
index.htmlimgcss   )r6   rf   is_dirrN   )r<   rZ   folderZtd_pathr!   r!   r"   test_td0   s$    


zR102WebsiteTest.test_td0zHTML entitiesc                 C   s.  t dd}t|tt  | jd }| jd }|d7 }d}d| d}d	| d
}t||jsnt||jrv|d7 }|dksJ |||fD ]x}d}d}	dD ]0}
d|
 |jv r|d7 }d|
 |jv r|	d7 }	q|	dkr|t|	d7 }|dkr|d7 }|dksJ |qW d    n1 s0    Y  |j	S )N<   rn   a_propos.htmlTD1/index.html
   zB[A-Za-z0-9._-]+(&commat;|&#x00040;|&#64;)[A-Za-z0-9._-]+.[A-Za-z]+z!href[ ]*=[ ]*"[ ]*mailto[ ]*:[ ]*z[ ]*"z!href[ ]*=[ ]*'[ ]*mailto[ ]*:[ ]*z[ ]*'   r   z:!?!r   rj   z&nbsp;)
r6   rY   FileNotFoundErrorAttributeErrorwebsiteresearchtextr:   rN   )r<   rZ   a_propostd1mailZhref1Zhref2filebadZgoodsymbolr!   r!   r"   test_html_entities   s2    



2z"R102WebsiteTest.test_html_entitieszA proposg      ?c                 C   s<  t dd}t|tt | jd }|d7 }|jjj}|jjj}|j	d ur^|j	j
 r^|d7 }|jd ur||jj
 r||d7 }|dD ]F}|d7 }|jdd r|d	7 }|jd
 }|dr|d7 } qq|dr|d7 }|tt|dd7 }|jdtddr|d7 }W d    n1 s,0    Y  |jS )Nr{   rn   rx   rj   rs   rq   altr.      srczimg/ulli   az^[ ]*mailto[ ]*:href)r6   rY   r|   r}   r~   	structurehtmlheadbodyh1r   striprk   find_allattrsget
startswithfindminlenr   compilerN   )r<   rZ   r   r   r   rq   r   r!   r!   r"   test_a_propos_file   s0    






(z"R102WebsiteTest.test_a_propos_filezindex.html (1)g      ?c                 C   s   t dd}t|tt` | jd }|d7 }|jj}|jjj}|j	dddrR|d7 }|j	dd	drh|d7 }W d    n1 s|0    Y  |j
S )
N   rn   rp   rj   r   ry   r   r   rx   )r6   rY   r|   r}   r~   r   r   r   r   r   rN   )r<   rZ   indexr    r   r!   r!   r"   test_root_index_file   s    


&z$R102WebsiteTest.test_root_index_filery   c                 C   s  t dd}t|ttP | jd }|jjj}|d7 }|jjj}|d7 }|	d}t
|dkrf|\}nd }|	d}t
|dkr|\}nd }|	d}	t
|	dkr|	\}
nd }
t|g dkr|d	7 }|d
ksJ |r|d7 }|dr|d7 }|dksJ |
r&|d7 }|
j  }|r&|d7 }|dks4J |r|d7 }tt|dhkr^|d7 }|tdd	td	tdd |	dD   7 }|dksJ d}d}|	dD ]F}|j dkrd}|r q|j dkrd}|r qq|r|d7 }|r|d7 }|dksJ |j	ddddD ]X}|d7 }|jdd  rV|d!7 }|jd" }|d#sv|d$kr~|d7 } qq.|d%ksJ |tdtd&d |	d'D 7 }|tdtd(d |	d)D 7 }|d*ksJ |dtdtd+d |	d,D  7 }|dtd-td.d |	d/D  7 }|d0ksBJ |j	d1d2d3rZ|d47 }W d    n1 sp0    Y  |jS )5N6   rn   ry   rj   headermainfooterr   r   r   r   r   r   rs   rz      sectionr   c                 s   s   | ]
}d V  qdS rj   Nr!   r%   r    r!   r!   r"   	<genexpr>E  r(   z6R102WebsiteTest.test_td1_index_file.<locals>.<genexpr>h2   FbURITURL   rq   i  i  )widthheightr   r.   r   r   z../img/zMhttps://pourcelot.bitbucket.io/img/wise-pug-thinking-about-the-world_925x.jpg   c                 s   s   | ]
}d V  qdS r   r!   r   r!   r!   r"   r   j  r(   
blockquotec                 s   s   | ]
}d V  qdS r   r!   r   r!   r!   r"   r   k  r(   Zcite"   c                 s   s   | ]
}d V  qdS r   r!   r   r!   r!   r"   r   o  r(   ol   c                 s   s   | ]
}d V  qdS r   r!   r   r!   r!   r"   r   p  r(   r   2   r   z../a_propos.htmlr      )r6   rY   r|   r}   r~   r   r   r   r   r   r   r+   r   r   lowerr   setr   abssumr   r   r   rN   )r<   rZ   r   r    r   headersr   mainsmain_footersr   r   uriurlr   rq   r   r!   r!   r"   test_td1_index_file  s    







.


""&&(z#R102WebsiteTest.test_td1_index_fileTD2/index.htmlc                 C   s  t dd}t|tt | jd }|jjj}|d7 }|jjj}|d7 }|	d}|d ur|d7 }|j
ddgkr||d7 }|j
d	d
kr|d7 }|j
ddkr|d7 }|d}t|dkr|\}nd }|d}t|dkr|\}	nd }	|d}
t|
dkr|
\}nd }t|g dkr.|d7 }|rP|d7 }|	drP|d7 }|r^|d7 }|	r|d7 }tt|	dhkr|d7 }dd |	jD }t|tdd |	dD kr|d7 }W d    n1 s0    Y  |jS )Nrm   rn   r   rj   linkrs   rel
stylesheettypetext/cssr   ../css/td.cssr   r   r   r   r   r   r   c                 S   s   g | ]}|j d kr|qS )r   r$   )r%   r3   r!   r!   r"   r'     r(   z7R102WebsiteTest.test_td2_index_file.<locals>.<listcomp>c                 s   s   | ]
}d V  qdS r   r!   r   r!   r!   r"   r     r(   z6R102WebsiteTest.test_td2_index_file.<locals>.<genexpr>r   r   )r6   rY   r|   r}   r~   r   r   r   r   r   r   r   r   r   r+   r   contentsr   rN   )r<   rZ   r   r   r   r   r   r   r   r   r   r   sectionsr!   r!   r"   test_td2_index_file}  sX    







"(z#R102WebsiteTest.test_td2_index_filezindex.html (2)c                 C   s  t dd}t|tt | jd }|d7 }|jj}|jjj}|	d}|d ur|d7 }|j
ddgkrp|d7 }|j
d	d
kr|d7 }|j
ddkr|d7 }|jdddr|d7 }|jdddr|d7 }|jdddr|d7 }W d    n1 s0    Y  |jS )N   rn   rp   rj   r   rs   r   r   r   r   r   r   r   ry   r   r   rx   )r6   rY   r|   r}   r~   r   r   r   r   r   r   r   r   rN   )r<   rZ   r   r   r   r   r!   r!   r"   test_updated_root_index_file  s,    



&z,R102WebsiteTest.test_updated_root_index_filezexo couleursrs   c                 C   s   t dd}t|tt | jd }|j }d|v r<|d7 }td|rP|d7 }td|sttd	|sttd
|r||d7 }td|r|d7 }W d    n1 s0    Y  |j	S )Nr   rn   r   z#78380dr   z(?<![0-9])(14\d|150)(?![0-9])rj   z#(?<![0-9])(16|seize)[ ]+million(s)?z#(?<![0-9])16[ ]*777[ ]*216(?![0-9])z256<sup>3</sup>z(?<![0-9])256(?=[^0-24-9]))
r6   rY   r|   r}   r~   r   r   r   r   rN   )r<   rZ   td2r   r!   r!   r"   ex_couleurs_css  s$    





&zR102WebsiteTest.ex_couleurs_csszexo DOMr   c                 C   s   t dd}t|tt | jd }|j}tdd|}t|	 }d	 
dd}||v rb|d7 }|d	}|d
kr||d7 }|d|}|d
krt|||d  t|kr|d7 }td|r|d7 }td|r|d7 }W d    n1 s0    Y  |jS )N   rn   r   \s+r.   uh  <body><header><h1>Les papous</h1></header><main><section><h2>Définition</h2><p>Les <em>papous</em> sont les habitants de Papouasie.</p></section><section><h2>Classification</h2><ul><li>Les papous papa.</li><li>Les papous pas papa.</li></ul></section></main><footer>Site réalisé par<i>C. Levi-Strauss</i>en partenariat avec<i>A. Franquin</i>.</footer></body>r   r   z<body><header><h1>lespapousr   z</body>r      z(?<![0-9])16nrj   z(?<![0-9])13n)r6   rY   r|   r}   r~   r   r   subr   r   replacer   r5   r   rN   )r<   rZ   r   r   compactZanswerstartendr!   r!   r"   ex_document_object_model  s6    


&z(R102WebsiteTest.ex_document_object_modelu   exo prioritéc           	      C   s  t dd}t|tt | jd }|j }tdd|}d|v sJd|v rR|d7 }d	|v rb|d7 }d
|v srd|v rz|d7 }|dkr|d7 }d}t	t
d|}h d}|D ]}||v r|d7 }q|t|| 8 }|dkr|d7 }|td|7 }W d    n1 s0    Y  |jS )Nr   rn   r   r   r.   ZmarronZbrownrj   violetZbleubluer   rs   r   z\(\d,\d,\d\)>   z(1,0,0)z(0,0,0)z(0,1,1)z(0,0,1)   )r6   rY   r|   r}   r~   r   r   r   r   r   findallr   r:   rN   )	r<   rZ   r   r   r   Ztuples_scoreZansweredexpectedr1   r!   r!   r"   ex_priorite  s0    



.zR102WebsiteTest.ex_prioritezCSS TD2c              	   C   sh  t dd}t|ttt6 z| jd j}|d7 }W n tyR   | jd j}Y n0 tdd |jD rp|d7 }|	d	}d
|v r|d7 }d|v r|d7 }|	d}d|v r|d7 }d|v r|d7 }d|v r|d7 }t
|	d}d|v r|d7 }h d}||@ r|d7 }t
|	d}d|v r,|d7 }||@ r>|d7 }|	d}||	d ||	d d
|v rz|d7 }|	d}	|	|	d |	|	d d|	v r|d7 }d|	v r|d7 }d|	d v r|d7 }|	d}
|
|	d |
|	d d|
v r|d7 }d|
v rB|d7 }d|
d v rB|d7 }W d    n1 sX0    Y  |jS ) N    rn   
css/td.cssr   zTD2/css/td.cssc                 s   s   | ]}t |s|V  qd S r9   )r   )r%   commentr!   r!   r"   r   D  r(   z/R102WebsiteTest.test_css_td2.<locals>.<genexpr>rs   pbackground-colorrj   colorr   border-colorzborder-stylez
text-alignzh1:hover>   
backgroundr   r   borderzh2:hoverr   zblockquote pzblockquote>pzblockquote::beforezblockquote p::beforezblockquote>p::beforer3      «zblockquote::afterzblockquote p::afterzblockquote>p::after   »)r6   rY   r|   r}   r   r~   r   anycommentsget_propertiesr   updaterN   )r<   rZ   rr   r   r   Zh1_overrC   Zh2_overquotesbeforeafterr!   r!   r"   test_css_td29  sp    













(zR102WebsiteTest.test_css_td2
box-sizingg      ?c              	   C   s   t dd}t|ttt z| jd j}|d7 }W n tyP   | jd j}Y n0 |d}|r|d7 }d|v r|d7 }|d dkr|d	7 }W d    n1 s0    Y  |jS )
Nr   rn   r   rj   zTD3/css/td.css*r   z
border-boxrs   )	r6   rY   r|   r}   r   r~   r   r   rN   )r<   rZ   rr   Zstar_propertiesr!   r!   r"   test_star_rule  s    

&zR102WebsiteTest.test_star_rulezTD3 CSSc                 C   s$  t dd}t|ttt | jd }|d}|rT|d7 }tdd |D rT|d7 }|d}|r|d7 }td	d |D r|d7 }td
d |D r|d7 }tdd |D r|d7 }tdd |D r|d7 }|ddkr|d7 }|ddkr|d7 }W d    n1 s0    Y  |j	S )N	   rn   zTD3/index.htmlr   rj   c                 s   s   | ]}| d V  qdS marginNr   r%   keyr!   r!   r"   r     r(   z3R102WebsiteTest.test_for_td3_css.<locals>.<genexpr>r   c                 s   s   | ]}| d V  qdS )r   Nr   r   r!   r!   r"   r     r(   c                 s   s   | ]}| d V  qdS r   r   r   r!   r!   r"   r     r(   c                 s   s   | ]}| d V  qdS )paddingNr   r   r!   r!   r"   r     r(   c                 s   s   | ]}| d V  qdS )r   Nr   r   r!   r!   r"   r     r(   z	max-widthzcalc(100% - 40px)r   z80%)
r6   rY   r|   r}   r   r~   Zget_css_propertyr   r   rN   )r<   rZ   Ztd3r   r   r!   r!   r"   test_for_td3_css  s0    



(z R102WebsiteTest.test_for_td3_cssZGalleriec              	      s  t dd}t|ttt z| jd }W n tyD   | jd }Y n0 |d7 }t|jD ]<\}}|dkrz|jdkrz|d7 }|dkrX|jdv rX|d7 }qXz| jd	 }W n ty   | jd
 }Y n0 |d7 }dD ]& t	 fdd|j
jD r|d7 }qW d    n1 s0    Y  |jS )Nr   rn   zTD3/galerie.htmlzTD3/gallerie.htmlrj   r   ztd.css)zgalerie.csszgallerie.csszTD3/galerie.csszTD3/gallerie.css)z
box-shadowzborder-radiusc                 3   s   | ]}|j  kV  qd S r9   r$   )r%   Zcss_propertyZproperty_namer!   r"   r     s   z/R102WebsiteTest.test_galerie.<locals>.<genexpr>rs   )r6   rY   r|   r}   r   r~   	enumerateZ!directly_linked_local_stylesheetsr   r   r   
propertiesrN   )r<   rZ   Zgalerieirf   Zgalerie_cssr!   r  r"   test_galerie  s6    



*zR102WebsiteTest.test_galeriezTD4 formc                 C   sJ  | j d }zdd | j|D }W n ty@   ddgf Y S 0 dd | j|D }d}tdd |D rv|d	7 }td
d |D r|d	7 }d|v r|d	7 }dd |D }|tt|dd 7 }tdd |D d	kr|d	7 }tdd |D d	kr|d	7 }tdd |D d	kr"|d	7 }d}||ks>J d| || g fS )Nro   c                 S   s   g | ]}|j D ]}|qqS r!   tagsr%   r   r2   r!   r!   r"   r'     r(   z1R102WebsiteTest.test_td4_form.<locals>.<listcomp>r   Folder not found: www/R102/TD4/c                 S   s   g | ]}|j D ]}|qqS r!   	selectorsr%   r   selectorr!   r!   r"   r'     s   
c                 s   s   | ]}|j d kV  qdS )formNr$   r%   r2   r!   r!   r"   r     r(   z0R102WebsiteTest.test_td4_form.<locals>.<genexpr>rj   c                 s   s   | ]}|j d kV  qdS )textareaNr$   r  r!   r!   r"   r     r(   zlabel::first-letterc                 S   s   g | ]}|j d kr|qS )inputr$   r  r!   r!   r"   r'     r(   r   rs   c                 s   s"   | ]}|j d dkrdV  qdS )r   rangerj   Nr   r   r  r!   r!   r"   r     r(   c                 s   s"   | ]}|j d dkrdV  qdS )r   emailrj   Nr  r  r!   r!   r"   r     r(   c                 s   s"   | ]}|j d dkrdV  qdS )r   r   rj   Nr  r  r!   r!   r"   r     r(   r   max_score should be at least )	rf   r~   get_directory_html_filesr|   get_directory_css_filesr   r   r   r   )r<   td4r
  r  rZ   inputs	max_scorer!   r!   r"   test_td4_form  s4    

zR102WebsiteTest.test_td4_formz	TD4 tablec                 C   s  | j d }zdd | j|D }W n ty@   ddgf Y S 0 dd | j|D }d}dd |D }|rv|d7 }|D ]}t|}d	| v rz qqzd }|d ur|d7 }t|d
dkr|d7 }dd |dD }t|dkr.|d7 }|d }	|	j	 }
d ur.|d7 }t|
ddkr.|d7 }dd |dD }t|dkr|d7 }|d }t|ddkr||d7 }t|ddkr|d7 }d|v r|d7 }d|v r|d7 }d|v r|d7 }d|v r|d7 }d|v r|d7 }d|v r|d7 }d}d}| j|D ]}|j
D ]r}|jdr|jD ]J}|jdkr:|s\|d7 }d}|jd r:|s:|d7 }d} qq:|r" qq"|r qq|D ]<}t|}d!|v rd"|v rd#|v rd$|v r qqd }|d ur|d7 }t|ddkr|d7 }t|dd%kr6|d7 }t|jdddd&dkrX|d7 }t|jdd'd(dkrx|d7 }t|jddd)dkr|d7 }d*}||ksJ d+| || g fS ),Nro   c                 S   s   g | ]}|j D ]}|qqS r!   r	  r  r!   r!   r"   r'     r(   z2R102WebsiteTest.test_td4_table.<locals>.<listcomp>r   r  c                 S   s   g | ]}|j D ]}|qqS r!   r  r  r!   r!   r"   r'     s   
c                 S   s   g | ]}|j d kr|qS )tabler$   r  r!   r!   r"   r'     r(   rj   u   téléphonecaptionc                 S   s   g | ]}|qS r!   r!   r  r!   r!   r"   r'     r(   theadthr   c                 S   s   g | ]}|qS r!   r!   r  r!   r!   r"   r'     r(   tbodytrr   tdr{   ztr:nth-child(2n)rs   ztr:nth-child(2n+1)ztd:first-childztd:first-child::first-letterzth:first-childzth:last-childFz:beforer3   Tu   ✆Z300Z50Z200100r   )colspanrowspanr   )r'  )r(     r  )rf   r~   r  r|   r  rW   r   r   r   r$  rulesr   endswithr  r   r8   r   )r<   r  r
  r  rZ   Ztablesr  r3   Z
thead_tagsr!  r$  Z
tbody_tagsr#  Zbefore_foundZunicode_phone_foundr   rulepropr  r!   r!   r"   test_td4_table  s    













(

zR102WebsiteTest.test_td4_tableN)rR   rS   rT   ri   r   rv   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r.  r!   r!   r!   r"   re      sB   	





'



v

C





'



F





$


re   c                 C   s   t t| || d S r9   )r
   re   )rf   outputZpath_on_serverr!   r!   r"   r   ^  s    r   __main__)(__doc__r   r   r   r   typesr   typingr   r   r   r   r   Zwebsites_test_frameworkr	   r
   r   Z"websites_test_framework.css_parserr   r   r   Zwebsites_test_framework.toolsr   Zwebsites_test_framework.websiter   r   ZWEBSITES_PATHZ
OUTPUT_DIRZPATH_ON_SERVERr   rW   r#   rh   r+   r5   r6   rY   re   r   rR   r!   r!   r!   r"   <module>   s8   .     V
