a
    YÒOcÙ  ã                   @   sº   d dl mZ d dlmZ d dlmZ z"d dlZdd„ Z	ej
j e	¡ W n eyX   Y n0 G dd„ dejƒZG d	d
„ d
ejƒZG dd„ dƒZG dd„ dejjƒZG dd„ dejed�ZdS )é    )Úmodels)Úgettext_lazy)ÚHandleRefManagerNc                  K   s.   |   d¡D ]}|j}|jd |_| ¡  q
d S )NÚversionsé   )ÚgetÚobjectÚversionÚsave)ÚkwargsÚvsÚinstance© r   úN/var/www/html/gsl.tools/lib/python3.9/site-packages/django_handleref/models.pyÚhandle_version	   s    r   c                       s"   e Zd ZdZd‡ fdd„	Z‡  ZS )ÚCreatedDateTimeFieldz+DateTimeField that's set to now() on createNc                    s<   |st dƒ}d|d< d|d< ttj| ƒj||fi |¤Ž d S )NÚCreatedFÚauto_nowTÚauto_now_add©Ú_Úsuperr   ÚDateTimeFieldÚ__init__©ÚselfZverbose_nameÚnamer   ©Ú	__class__r   r   r      s
    zCreatedDateTimeField.__init__)NN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__classcell__r   r   r   r   r      s   r   c                       s"   e Zd ZdZd‡ fdd„	Z‡  ZS )ÚUpdatedDateTimeFieldz.DateTimeField that's set to now() every updateNc                    s<   |st dƒ}d|d< d|d< ttj| ƒj||fi |¤Ž d S )NZUpdatedTr   Fr   r   r   r   r   r   r   $   s
    zUpdatedDateTimeField.__init__)NNr   r   r   r   r   r%   !   s   r%   c                   @   s   e Zd Zg Zdd„ ZdS )ÚHandleRefOptionsc                 C   sL   |r0|j  ¡ D ] \}}| d¡r"qt| ||ƒ qt| dd ƒsH|j ¡ | _d S )NÚ__Útag)Ú__dict__ÚitemsÚ
startswithÚsetattrÚgetattrr    Úlowerr(   )r   ÚclsÚoptsÚkeyÚvaluer   r   r   r   1   s    
zHandleRefOptions.__init__N)r    r!   r"   Údelete_cascader   r   r   r   r   r&   .   s   r&   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚHandleRefMetac                    sh   t ƒ j}dd„ |D ƒ}|s(|| |||ƒS || |||ƒ}| dd ¡}|sRt|dd ƒ}t|dt||ƒƒ |S )Nc                 S   s   g | ]}t |tƒr|‘qS r   )Ú
isinstancer4   )Ú.0Úbr   r   r   Ú
<listcomp>A   ó    z)HandleRefMeta.__new__.<locals>.<listcomp>Z	HandleRefÚ
_handleref)r   Ú__new__Úpopr-   r,   r&   )r/   r   ÚbasesÚattrsZ	super_newÚparentsÚnewr0   r   r   r   r;   =   s    zHandleRefMeta.__new__)r    r!   r"   r;   r$   r   r   r   r   r4   <   s   r4   c                   @   sŽ   e Zd ZdZejdd�Zejedƒddd�Z	e
ƒ Zeƒ Zejdd�Zeƒ Ze ¡ ZG d	d
„ d
ƒZedd„ ƒZedd„ ƒZdd„ Zddd„ZdS )ÚHandleRefModelzŽ
    Provides timestamps for creation and change times,
    versioning (using django-reversion) as well as
    the ability to soft-delete
    T)Zprimary_keyÚStatuséÿ   )Ú
max_lengthÚblankr   )Údefaultc                   @   s   e Zd ZdZdZdZdS )zHandleRefModel.MetaTÚupdated)z-updatedz-createdN)r    r!   r"   ZabstractZget_latest_byZorderingr   r   r   r   ÚMeta^   s   rH   c                 C   s   | j jstdƒ‚| j jS )Nztag not set)r:   r(   Ú
ValueError©r   r   r   r   Úref_tagf   s    zHandleRefModel.ref_tagc                 C   s    | j stdƒ‚| jjt| j ƒ S )Nz
id not set)ÚidrI   r:   r(   ÚstrrJ   r   r   r   Úhandlel   s    zHandleRefModel.handlec                 C   s(   t | dƒs| jj}n| j}|d | j S )Nr   ú-)Úhasattrr   r    r   rN   )r   r   r   r   r   Ú__unicode__r   s    

zHandleRefModel.__unicode__Fc                 C   sd   |rt j | ¡S d| _|  ¡  | jjD ]8}t| |ƒ ¡ }|sH|j	dd�}|D ]}|j|d� qLq&dS )a4  
        Override the vanilla delete functionality to soft-delete
        instead. Soft-delete is accomplished by setting the
        status field to "deleted"

        Arguments:

        hard <bool=False> if true, do a hard delete instead, effectively
        removing the object from the database
        Zdeleted)Ústatus)ÚhardN)
r   ÚModelÚdeleterR   r
   r:   r3   r-   ÚallÚexclude)r   rS   r1   ÚqÚchildr   r   r   rU   y   s    zHandleRefModel.deleteN)F)r    r!   r"   r#   r   Z	AutoFieldrL   Z	CharFieldr   rR   r   Úcreatedr%   rG   ZIntegerFieldr	   r   Z	handlerefÚManagerÚobjectsrH   ÚpropertyrK   rN   rQ   rU   r   r   r   r   rA   N   s   

rA   )Ú	metaclass)Z	django.dbr   Zdjango.utils.translationr   r   Zdjango_handleref.managerr   Zreversion.signalsZ	reversionr   ZsignalsZpost_revision_commitÚconnectÚImportErrorr   r   r%   r&   ÚbaseZ	ModelBaser4   rT   rA   r   r   r   r   Ú<module>   s   