a
    YÒOcN
  ã                   @   sP   d dl Z d dlZd dlmZ d dlmZ G dd„ dejƒZG dd„ dejƒZ	dS )é    N)ÚObjectDoesNotExist)Úmodelsc                   @   s*   e Zd ZdZdd„ Zd
dd„Zdd	„ ZdS )ÚHandleRefQuerySetz7
    Custom queryset to provide handleref querying
    c                 C   s>   z$|   d¡}|   d¡}t|j|jƒW S  ty8   Y dS 0 dS )z 
        queries the database for the most recent time an object was either created or
        updated

        returns datetime or None if db is empty
        ÚcreatedÚupdatedN)ZlatestÚmaxr   r   r   )ÚselfZcdtZudt© r	   úO/var/www/html/gsl.tools/lib/python3.9/site-packages/django_handleref/manager.pyÚlast_change   s    

zHandleRefQuerySet.last_changeNFc                 C   sf   | }|durBt |tjƒr$tj |¡}| tj|d�tj|d�B ¡}|durV|j|d�}|sb| ¡ }|S )a  
        Queries the database for objects updated since timestamp or version

        Arguments:

        timestamp <DateTime=None|int=None> if specified return all objects modified since
        that specified time. If integer is submitted it is treated like a unix timestamp

        version <int=None> if specified return all objects with a version greater
        then the one specified

        deleted <bool=False> if true include soft-deleted objects in the result

        Either timestamp or version needs to be provided
        N)Zcreated__gt)Zupdated__gt)Zversion__gt)	Ú
isinstanceÚnumbersÚRealÚdatetimeÚfromtimestampÚfilterr   ÚQÚ	undeleted)r   Ú	timestampÚversionÚdeletedZqsetr	   r	   r
   Úsince   s    ÿzHandleRefQuerySet.sincec                 C   s   | j dd�S )z?
        Only return objects that are not soft-deleted
        r   )Ústatus)Úexclude©r   r	   r	   r
   r   D   s    zHandleRefQuerySet.undeleted)NNF)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r	   r	   r	   r
   r      s   
&r   c                   @   sD   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dS )ÚHandleRefManagerz6
    Custom manager to provide handleref querying
    c                 C   s
   |   d¡S )NÚtag)Úpropr   r	   r	   r
   r    S   s    zHandleRefManager.tagc                 C   s   t | jj|ƒS )zv
        Convenience function for retrieving properties off the
        HandleRef class instance on the model
        )ÚgetattrÚmodelZ
_handleref)r   Úkeyr	   r	   r
   r!   W   s    zHandleRefManager.propc                 C   s   t | j| jd�S )N)Úusing)r   r#   Ú_dbr   r	   r	   r
   Úget_queryset_   s    zHandleRefManager.get_querysetc                 K   s   |   ¡ jf i |¤ŽS ©N)r'   r   ©r   Úkwargsr	   r	   r
   r   b   s    zHandleRefManager.last_changec                 K   s   |   ¡ jf i |¤ŽS r(   )r'   r   r)   r	   r	   r
   r   e   s    zHandleRefManager.sincec                 C   s   |   ¡  ¡ S r(   )r'   r   r   r	   r	   r
   r   h   s    zHandleRefManager.undeletedN)r   r   r   r   Úpropertyr    r!   r'   r   r   r   r	   r	   r	   r
   r   M   s   
r   )
r   r   Zdjango.core.exceptionsr   Z	django.dbr   ZQuerySetr   ÚManagerr   r	   r	   r	   r
   Ú<module>   s
   E