U
    -yagz  ã                   @   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 ddlmZmZ ddlmZ dd	lmZ dd
lmZmZ 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Ú	Validator)ÚAttrMapÚAttrMapValue)ÚWidget)Úmm)ÚasUnicodeExÚ	isUnicode)Ú	qrencoderc                   @   s   e Zd Zdd„ ZdS )ÚisLevelc                 C   s   |dkS )N)ÚLÚMÚQÚH© ©ÚselfÚxr   r   úQ/var/www/html/myvenv/lib/python3.8/site-packages/reportlab/graphics/barcode/qr.pyÚ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 ©N)Ú
isinstancer   ÚQR)Ú.0Úvr   r   r   Ú	<genexpr>*   s     z*isUnicodeOrQRList._test.<locals>.<genexpr>F)r   Úallr   r   r   r   Ú_test'   s
    zisUnicodeOrQRList._testc                 C   s   |   |¡p|  |¡S r!   )r(   ZnormalizeTestr   r   r   r   r   .   s    zisUnicodeOrQRList.testc                 C   s>   |   |¡r|S z
t|ƒW S  tk
r8   td| ƒ‚Y nX d S )NzCan't convert to unicode: %r)r(   r   ÚUnicodeErrorÚ
ValueErrorr   r   r   r   Ú	normalize1   s    

zisUnicodeOrQRList.normalizeN)r   r   r   r(   r   r+   r   r   r   r   r    &   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   )Ú	fillColorZstrokeColorZstrokeWidth)r   Ú__init__)r   r   ÚyÚwidthÚheightr-   r   r   r   r.   ;   s     ÿzSRect.__init__N)r   r   r   r   Úblackr.   r   r   r   r   r,   :   s   r,   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.)ZBASEÚvaluer   r/   Ú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ƒrd|  | j¡ n| jr€| jD ]}|  |¡ qpd S )NÚqr)r    r+   r4   ÚitemsÚsetattrÚgetattrr   ÚQRErrorCorrectLevelr9   ÚQRCoder:   Ú__dict__r   ÚaddData©r   r4   ÚkwÚkr%   Zec_levelr   r   r   r.   \   s    

zQrCodeWidget.__init__c                 C   s   | j  |¡ d S r!   ©r@   rG   ©r   r4   r   r   r   rG   k   s    zQrCodeWidget.addDatac              	   C   s6  | j  ¡  tƒ }| j}| j}| j}| j}| j}| j}| 	t
||||d d�¡ | j  ¡ }tt||ƒƒ}	|	||d   }
|||	 d  }||	| d  }t| j jƒD ]�\}}tt|ƒ}d}t |¡D ]n\}}|}tt|ƒƒ}|�r&|| |
 }|| d |
 }t
|| || | ||
 |
|d�}| 	|¡ ||7 }qÀq |S )N)r-   ç       @r   é   )r@   Úmaker   r5   r8   r6   r7   r   r/   Úaddr,   ÚgetModuleCountÚfloatÚminÚ	enumerateÚmodulesÚmapÚboolÚ	itertoolsÚgroupbyÚlenÚlist)r   ÚgÚcolorÚborderr0   r1   r   r/   ÚmoduleCountZminwhZboxsizeZoffsetXZoffsetYÚrÚrowÚcÚtÚttÚisDarkÚcountÚsr   r   r   Údrawn   s:    


ÿ
zQrCodeWidget.draw)r?   )r   r   r   ZcodeNamer   r   r   r    r   r	   r   r   Z_attrMapr   r/   r   r2   r5   r<   r;   r   r7   r6   r8   r9   r:   r4   r.   rG   rh   r   r   r   r   r   ?   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 )ÚQrCoder=   r>   r   Nc                 K   s€   t  |¡| _| ¡ D ]\}}t| ||ƒ qttj| jƒ}t 	| j
|¡| _t| jƒr`|  | j¡ n| jr|| jD ]}|  |¡ qld S r!   )r    r+   r4   rA   rB   rC   r   rD   ÚqrLevelrE   r:   r@   r   rG   rH   r   r   r   r.   �   s    

zQrCode.__init__c                 C   s   | j  |¡ d S r!   rK   rL   r   r   r   rG   ­   s    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 }qjqJd S )NrM   r   rN   gÍÌÌÌÌÌð?)r@   rO   rQ   ÚqrBorderr0   r1   rT   rU   rV   rW   rX   rY   rZ   r[   Úrect)r   r_   r^   ZxsizeZysizer`   ra   rb   rc   rd   re   rf   r   r/   r   r   r   rh   °   s     


zQrCode.drawc                 C   s   | j j||||ddd� d S )Nr   rN   )ÚstrokeÚfill)Zcanvrl   )r   r   r/   ÚwÚhr   r   r   rl   Ä   s    zQrCode.rect)N)r   r   r   r   r1   r0   rk   rj   r:   r4   r.   rG   rh   rl   r   r   r   r   ri   •   s   
ri   )Ú__all__rX   Zreportlab.platypus.flowablesr   Zreportlab.graphics.shapesr   r   Zreportlab.libr   Zreportlab.lib.validatorsr   r   r	   r
   Zreportlab.lib.attrmapr   r   Zreportlab.graphics.widgetbaser   Zreportlab.lib.unitsr   Zreportlab.lib.utilsr   r   Zreportlab.graphics.barcoder   r   r    r,   r   ri   r   r   r   r   Ú<module>   s"   V