o
    /hX                     @   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)gettext_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                    s,   | dt| dd| _t jdi | d S )Nupdate_modifiedT )popgetattrr   supersave)selfkwargs	__class__r   V/var/www/html/env_mimamsha/lib/python3.10/site-packages/django_extensions/db/models.pyr      s   zTimeStampedModel.savec                   @      e Zd ZdZdZdS )zTimeStampedModel.Metar
   TN)__name__
__module____qualname__get_latest_by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   B   r)   r   N)r   r   r   r   r   r   r-   r   r   r   r   r   r,   1   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   activeM      zActivatorQuerySet.activec                 C   r0   )zReturn inactive query setr1   )r3   r4   INACTIVE_STATUSr6   r   r   r   inactiveQ   r8   zActivatorQuerySet.inactiveN)r   r   r   r   r7   r:   r   r   r   r   r/   F   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_queryset^   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   b      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:   j   rA   zActivatorModelManager.inactiveN)r   r   r   r   r?   r7   r:   r   r   r   r   r;   V   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                   @   r   )zActivatorModel.Meta)r2   z-activate_dateTN)r   r   r   orderingr   r   r   r   r   r      s    r   c                    s$   | j st | _ t j|i | d S )N)activate_dater   r   r   )r   argsr   r   r   r   r      s   zActivatorModel.save)r   r   r   r   r9   r5   r   STATUS_CHOICESr   IntegerFieldr2   DateTimeFieldrI   deactivate_dater;   objectsr   r   r   r   r   r   r   r4   s   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   