o
    
TèU’  ã                   @   s  d Z ddlZddlmZ ddlmZ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 ddlmZ dd	lmZ z
dd
lmZmZ W n eyX   ddd„Zdd„ ZY nw ddlmZ G dd„ deƒZeƒ ZG dd„ deƒZeƒ ZG dd„ deƒZG dd „ d eƒZG dd„ deƒZ dS )ÚQrCodeWidgeté    N)ÚFlowable)ÚGroupÚRect)Úcolors)ÚisNumberÚisNumberOrNoneÚisColorÚisStringÚ	Validator)ÚAttrMapÚAttrMapValue)ÚWidget)Úmm)ÚasUnicodeExÚ	isUnicodeÚutf8c                 C   s0   t | tƒr| S t | tƒr|  |¡S t| ƒ |¡S ©N)Ú
isinstanceÚunicodeÚstrÚdecode)ÚvÚenc© r   úO/var/www/html/env/lib/python3.10/site-packages/reportlab/graphics/barcode/qr.pyr   "   s
   


r   c                 C   s
   t | tƒS r   )r   r   )r   r   r   r   r   )   s   
r   )Ú	qrencoderc                   @   s   e Zd Zdd„ ZdS )ÚisLevelc                 C   s   |dv S )N)ÚLÚMÚQÚHr   ©ÚselfÚxr   r   r   Útest/   s   zisLevel.testN)Ú__name__Ú
__module__Ú__qualname__r%   r   r   r   r   r   .   s    r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚisUnicodeOrQRListc                 C   s&   t |ƒrdS tdd„ |D ƒƒrdS dS )NTc                 s   s   � | ]	}t |tjƒV  qd S r   )r   r   ÚQR)Ú.0r   r   r   r   Ú	<genexpr>7   s   € z*isUnicodeOrQRList._test.<locals>.<genexpr>F)r   Úallr"   r   r   r   Ú_test4   s
   zisUnicodeOrQRList._testc                 C   s   |   |¡p	|  |¡S r   )r.   ÚnormalizeTestr"   r   r   r   r%   ;   s   zisUnicodeOrQRList.testc                 C   s4   |   |¡r|S zt|ƒW S  ty   td| ƒ‚w )NzCan't convert to unicode: %r)r.   r   ÚUnicodeErrorÚ
ValueErrorr"   r   r   r   Ú	normalize>   s   

ÿzisUnicodeOrQRList.normalizeN)r&   r'   r(   r.   r%   r2   r   r   r   r   r)   3   s    r)   c                   @   s   e Zd Zejfdd„ZdS )ÚSRectc              
   C   s   t j| |||||d dd� d S )Nr   )Ú	fillColorÚstrokeColorÚstrokeWidth)r   Ú__init__)r#   r$   ÚyÚwidthÚheightr4   r   r   r   r7   H   s   
ÿzSRect.__init__N)r&   r'   r(   r   Úblackr7   r   r   r   r   r3   G   s    r3   c                   @   sØ   e Zd ZdZeeeedd�eedd�eedd�ee	dd�eedd�eedd�eed	d�ee
d
d�eedd�eedd�ee	dd�d�ZdZdZejZdZdZde Zde ZdZdZdZdZddd„Zdd„ Zdd„ ZdS )r   r*   zQRCode data)Údesczx-coordzy-coordz	bar colorzWidth of bars.zHeight of bars.zWidth of QR border.zQR Code level.zQR Code version. None for autozWidth of bar borders.zColor of bar borders.)ÚBASEÚvaluer$   r8   ÚbarFillColorÚbarWidthÚ	barHeightÚ	barBorderÚbarLevelÚ	qrVersionÚbarStrokeWidthÚbarStrokeColorr   Né    é   r   úHello Worldc                 K   sŠ   t  |¡| _| ¡ D ]
\}}t| ||ƒ q
ttj| jƒ}t 	| j
|¡| jd< t| jƒr3|  | j¡ d S | jrA| jD ]	}|  |¡ q9d S d S )NÚqr)r)   r2   r>   ÚitemsÚsetattrÚgetattrr   ÚQRErrorCorrectLevelrC   ÚQRCoderD   Ú__dict__r   ÚaddData©r#   r>   ÚkwÚkr   Úec_levelr   r   r   r7   i   s   

þzQrCodeWidget.__init__c                 C   ó   | j  |¡ d S r   ©rJ   rQ   ©r#   r>   r   r   r   rQ   x   ó   zQrCodeWidget.addDatac              	   C   s0  | j  ¡  tƒ }| j}| j}| j}| j}| j}| j}| 	t
||||d d�¡ | j  ¡ }tt||ƒƒ}	|	||d   }
|||	 d  }||	| d  }t| j jƒD ]E\}}tt|ƒ}d}t |¡D ]4\}}|}tt|ƒƒ}|r�|| |
 }|| d |
 }t
|| || | ||
 |
ƒ}| 	|¡ ||7 }q`qP|S )N)r4   ç       @r   é   )rJ   Úmaker   r?   rB   r@   rA   r$   r8   Úaddr3   ÚgetModuleCountÚfloatÚminÚ	enumerateÚmodulesÚmapÚboolÚ	itertoolsÚgroupbyÚlenÚlist)r#   ÚgÚcolorÚborderr9   r:   r$   r8   ÚmoduleCountÚminwhÚboxsizeÚoffsetXÚoffsetYÚrÚrowÚcÚtÚttÚisDarkÚcountÚsr   r   r   Údraw{   s8   




ø
zQrCodeWidget.draw)rI   )r&   r'   r(   ÚcodeNamer   r   r   r)   r   r	   r   r   Ú_attrMapr$   r8   r   r;   r?   rF   rE   r   rA   r@   rB   rC   rD   r>   r7   rQ   ry   r   r   r   r   r   L   s<    










ó
c                   @   sN   e Zd Zde Zde ZdZdZdZdZ	ddd„Z
dd„ Zd	d
„ Zdd„ ZdS )ÚQrCoderG   rH   r   Nc                 K   s†   t  |¡| _| ¡ D ]
\}}t| ||ƒ q
ttj| jƒ}t 	| j
|¡| _t| jƒr1|  | j¡ d S | jr?| jD ]	}|  |¡ q7d S d S r   )r)   r2   r>   rK   rL   rM   r   rN   ÚqrLevelrO   rD   rJ   r   rQ   rR   r   r   r   r7   ©   s   

þzQrCode.__init__c                 C   rV   r   rW   rX   r   r   r   rQ   ¹   rY   zQrCode.addDatac              	   C   sÐ   | j  ¡  | j  ¡ }| j}| j||d   }| j||d   }t| j jƒD ]@\}}tt	|ƒ}d}t
 |¡D ]/\}}	|}
tt|	ƒƒ}|
r`|| | }| j|| d |  }|  |||| |d ¡ ||7 }q5q%d S )NrZ   r   r[   gÍÌÌÌÌÌð?)rJ   r\   r^   ÚqrBorderr9   r:   ra   rb   rc   rd   re   rf   rg   rh   Úrect)r#   rl   rk   ÚxsizeÚysizerq   rr   rs   rt   ru   rv   rw   r$   r8   r   r   r   ry   ¼   s$   



ùýzQrCode.drawc                 C   s   | j j||||ddd� d S )Nr   r[   )ÚstrokeÚfill)Úcanvr   )r#   r$   r8   ÚwÚhr   r   r   r   Ð   s   zQrCode.rectr   )r&   r'   r(   r   r:   r9   r~   r}   rD   r>   r7   rQ   ry   r   r   r   r   r   r|   ¡   s    
r|   )r   )!Ú__all__re   Úreportlab.platypus.flowablesr   Úreportlab.graphics.shapesr   r   Úreportlab.libr   Úreportlab.lib.validatorsr   r   r	   r
   r   Úreportlab.lib.attrmapr   r   Úreportlab.graphics.widgetbaser   Úreportlab.lib.unitsr   Úreportlab.lib.utilsr   r   ÚImportErrorÚreportlab.graphics.barcoder   r   r)   r3   r   r|   r   r   r   r   Ú<module>   s.   
÷U