o
    uvXj=  ã                   @   s¨   d dl mZ d dlmZ d dlmZ d dlmZm	Z	m
Z
 G dd„ dejƒZG dd„ dejƒZG d	d
„ d
eƒZG dd„ dejjƒZG dd„ dejƒZG dd„ dejƒZdS )é    )Úmodels)Únow)Úugettext_lazy)ÚAutoSlugFieldÚCreationDateTimeFieldÚModificationDateTimeFieldc                       sF   e Zd ZdZeedƒƒZeedƒƒZ‡ fdd„Z	G dd„ dƒZ
‡  ZS )ÚTimeStampedModelz|
    TimeStampedModel

    An abstract base class model that provides self-managed "created" and
    "modified" fields.
    ÚcreatedÚmodifiedc                    s0   |  dt| ddƒ¡| _tt| ƒjdi |¤Ž d S )NÚupdate_modifiedT© )ÚpopÚgetattrr   Úsuperr   Úsave)ÚselfÚkwargs©Ú	__class__r   úX/var/www/html/myproject/venv/lib/python3.10/site-packages/django_extensions/db/models.pyr      s   zTimeStampedModel.savec                   @   s   e Zd ZdZdZdZdS )zTimeStampedModel.Metar
   )z	-modifiedz-createdTN)Ú__name__Ú
__module__Ú__qualname__Úget_latest_byÚorderingÚabstractr   r   r   r   ÚMeta   s    r   )r   r   r   Ú__doc__r   Ú_r	   r   r
   r   r   Ú__classcell__r   r   r   r   r   
   s    r   c                   @   sD   e Zd ZdZejedƒdd�Zejedƒddd�Z	G dd	„ d	ƒZ
d
S )ÚTitleDescriptionModelzm
    TitleDescriptionModel

    An abstract base class model that provides title and description fields.
    Útitleéÿ   )Ú
max_lengthÚdescriptionT)ÚblankÚnullc                   @   ó   e Zd ZdZdS )zTitleDescriptionModel.MetaTN©r   r   r   r   r   r   r   r   r   )   ó    r   N)r   r   r   r   r   Ú	CharFieldr   r!   Ú	TextFieldr$   r   r   r   r   r   r       s
    r    c                   @   s.   e Zd ZdZeedƒdd�ZG dd„ dƒZdS )ÚTitleSlugDescriptionModelaÁ  
    TitleSlugDescriptionModel

    An abstract base class model that provides title and description fields
    and a self-managed "slug" field that populates from the title.

    .. note ::
        If you want to use custom "slugify" function, you could
        define ``slugify_function`` which then will be used
        in :py:class:`AutoSlugField` to slugify ``populate_from`` field.

        See :py:class:`AutoSlugField` for more details.
    Úslugr!   )Úpopulate_fromc                   @   r'   )zTitleSlugDescriptionModel.MetaTNr(   r   r   r   r   r   >   r)   r   N)r   r   r   r   r   r   r-   r   r   r   r   r   r,   -   s    r,   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚActivatorQuerySetzH
    ActivatorQuerySet

    Query set that returns statused results
    c                 C   ó   | j tjd�S )z Return active query set ©Ústatus)ÚfilterÚActivatorModelÚACTIVE_STATUS©r   r   r   r   ÚactiveI   ó   zActivatorQuerySet.activec                 C   r0   )z Return inactive query set r1   )r3   r4   ÚINACTIVE_STATUSr6   r   r   r   ÚinactiveM   r8   zActivatorQuerySet.inactiveN)r   r   r   r   r7   r:   r   r   r   r   r/   B   s    r/   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚActivatorModelManagerz|
    ActivatorModelManager

    Manager to return instances of ActivatorModel: SomeModel.objects.active() / .inactive()
    c                 C   s   t | j| jd�S )z' Use ActivatorQuerySet for all results )ÚmodelÚusing)r/   r<   Ú_dbr6   r   r   r   Úget_querysetY   s   z"ActivatorModelManager.get_querysetc                 C   ó   |   ¡  ¡ S )zƒ
        Return active instances of ActivatorModel:

        SomeModel.objects.active(), proxy to ActivatorQuerySet.active
        )r?   r7   r6   r   r   r   r7   ]   ó   zActivatorModelManager.activec                 C   r@   )z‰
        Return inactive instances of ActivatorModel:

        SomeModel.objects.inactive(), proxy to ActivatorQuerySet.inactive
        )r?   r:   r6   r   r   r   r:   e   rA   zActivatorModelManager.inactiveN)r   r   r   r   r?   r7   r:   r   r   r   r   r;   R   s
    r;   c                       s�   e Zd ZdZdZdZeedƒfeedƒffZej	edƒeed�Z
ejdded	ƒd
�Zejddedƒd
�Zeƒ ZG dd„ dƒZ‡ fdd„Z‡  ZS )r4   zh
    ActivatorModel

    An abstract base class model that provides activate and deactivate fields.
    r   é   ÚInactiveÚActiver2   )ÚchoicesÚdefaultTz&keep empty for an immediate activation)r%   r&   Ú	help_textz$keep empty for indefinite activationc                   @   s   e Zd ZdZdZdS )zActivatorModel.Meta)r2   z-activate_dateTN)r   r   r   r   r   r   r   r   r   r   �   s    r   c                    s(   | j stƒ | _ tt| ƒj|i |¤Ž d S )N)Úactivate_dater   r   r4   r   )r   Úargsr   r   r   r   r   …   s   zActivatorModel.save)r   r   r   r   r9   r5   r   ÚSTATUS_CHOICESr   ÚIntegerFieldr2   ÚDateTimeFieldrH   Údeactivate_dater;   Úobjectsr   r   r   r   r   r   r   r4   n   s    

þr4   N)Ú	django.dbr   Údjango.utils.timezoner   Údjango.utils.translationr   r   Údjango_extensions.db.fieldsr   r   r   ÚModelr   r    r,   ÚqueryÚQuerySetr/   ÚManagerr;   r4   r   r   r   r   Ú<module>   s   