o
    h                     @   s   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ	 d dl
mZmZ G dd dejZG d	d
 d
ejZG dd dejZdS )    N)settings)models)timezone)gettext_lazy)MAX_QUERY_STRING_LENGTHnormalise_query_stringc                       sn   e Zd ZejeddZ fddZdddZdd	 Z	e
d
d Zedd Zedd ZedddZ  ZS )QueryT)
max_lengthuniquec                    s"   t | j| _t j|i | d S N)r   query_stringsupersave)selfargskwargs	__class__ h/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/contrib/search_promotions/models.pyr      s   z
Query.saveNc                 C   sD   |d u r
t   }tjj| |d\}}tdd |_|	  d S )Nquerydatehits   )
r   nowr   QueryDailyHitsobjectsget_or_creater   Fr   r   )r   r   
daily_hitscreatedr   r   r   add_hit   s   
zQuery.add_hitc                 C   s   | j S r   r   r   r   r   r   __str__   s   zQuery.__str__c                 C   s"   | j tdd }|r|S dS )Nr   	hits__sumr   )r    	aggregater   Sum)r   r   r   r   r   r       s   z
Query.hitsc                 C   s4   t | dr	ddini }| jjdddi|  dS )zT
        Deletes all Query records that have no daily hits or editors picks
        editors_pickseditors_picks__isnullTdaily_hits__isnullNr   )hasattrr   filterdelete)clsextra_filter_kwargsr   r   r   garbage_collect%   s   	zQuery.garbage_collectc                 C   s   | j jt|dd S )Nr#   r   )r   r   r   )r/   r   r   r   r   get3   s
   z	Query.getc                 C   s:   | j jdd}|r|j|d}|jtdd dS )NF)r+   )daily_hits__date__gtedaily_hits__hits)_hitsz-_hits)r   r-   annotater   r(   distinctorder_by)r/   
date_sincer   r   r   r   get_most_popular9   s   zQuery.get_most_popularr   )__name__
__module____qualname__r   	CharFieldr   r   r   r"   r%   propertyr   classmethodr1   r2   r:   __classcell__r   r   r   r   r      s    
	


r   c                   @   sP   e Zd ZejeddejdZe Z	ej
ddZedddZG d	d
 d
ZdS )r   Tr    db_indexrelated_name	on_deleter   )defaultNc                 C   sD   |du r
t tddn|}t  t| }| jj|d	  dS )z]
        Deletes all QueryDailyHits records that are older than a set number of days
        NWAGTAILSEARCH_HITS_MAX_AGE   )date__lt)
getattrr   r   r   r   datetime	timedeltar   r-   r.   )r/   daysmin_dater   r   r   r1   N   s   zQueryDailyHits.garbage_collectc                   @   s    e Zd ZdZedZedZdS )zQueryDailyHits.Meta)r   zQuery Daily HitsN)r;   r<   r=   unique_together_verbose_nameverbose_name_pluralr   r   r   r   MetaZ   s    rS   r   )r;   r<   r=   r   
ForeignKeyr   CASCADEr   	DateFieldr   IntegerFieldr   r@   r1   rS   r   r   r   r   r   G   s    
r   c                   @   s   e Zd ZejeddejdZejdededejdddZ	ej
eded	dd
ZejddddZejededddZejddddZedd Zedd Zdd Zdd ZG dd dZdS )SearchPromotionTr)   rB   zwagtailcore.Pagepagez*Choose an internal page for this promotion)rQ   	help_textrE   nullblankzExternal link URLz6Alternatively, use an external link for this promotion)rZ   r\      )r	   r\   r[   descriptionz)Applies to internal page or external link)rQ   rZ   r\   F)r[   r\   editablec                 C   s   | j r	| j j}|S | j}|S r   )rY   titleexternal_link_textr   propr   r   r   r`   }   s
   zSearchPromotion.titlec                 C   s   | j r| j }|S | j}|S r   )rY   external_link_urlrb   r   r   r   link   s
   zSearchPromotion.linkc                 C   s2   | j rd}nd}d| jj d| d | j d S )NrY   zexternal linkzSearchPromotion(query="z", z="z"))rY   r   r   r`   )r   labelr   r   r   __repr__   s   
zSearchPromotion.__repr__c                 C   s   | j j d| j S )Nz - )r   r   r`   r$   r   r   r   r%      s   zSearchPromotion.__str__c                   @   s   e Zd ZdZedZdS )zSearchPromotion.Meta)
sort_orderzsearch promotionN)r;   r<   r=   orderingrP   rQ   r   r   r   r   rS      s    rS   N)r;   r<   r=   r   rT   r   rU   r   rP   rY   URLFieldrd   r>   ra   	TextFieldr^   rW   rh   r?   r`   re   rg   r%   rS   r   r   r   r   rX   `   sF    


rX   )rK   django.confr   	django.dbr   django.utilsr   django.utils.translationr   rP   wagtail.search.utilsr   r   Modelr   r   rX   r   r   r   r   <module>   s    <