a
    Dg                     @   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__ g/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/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   Z	hits__sumr   )r    Z	aggregater   Sum)r   r   r   r   r   r       s    z
Query.hitsc                 C   s4   t | drddini }| jjf ddi|  dS )zT
        Deletes all Query records that have no daily hits or editors picks
        editors_picksZeditors_picks__isnullTdaily_hits__isnullN)hasattrr   filterdelete)clsZ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(   )Zdaily_hits__date__gteZdaily_hits__hits)Z_hitsz-_hits)r   r*   Zannotater   r&   ZdistinctZorder_by)r,   Z
date_sincer   r   r   r   get_most_popular9   s    zQuery.get_most_popular)N)N)__name__
__module____qualname__r   	CharFieldr   r   r   r"   r%   propertyr   classmethodr-   r.   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    Zdb_indexZ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
        NZWAGTAILSEARCH_HITS_MAX_AGE   )Zdate__lt)
getattrr   r   r   r   datetime	timedeltar   r*   r+   )r,   daysZmin_dater   r   r   r-   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)r0   r1   r2   Zunique_together_verbose_nameZverbose_name_pluralr   r   r   r   MetaZ   s   rA   )N)r0   r1   r2   r   
ForeignKeyr   CASCADEr   Z	DateFieldr   IntegerFieldr   r5   r-   rA   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'   r7   zwagtailcore.Pagepagez*Choose an internal page for this promotion)r@   	help_textr8   nullblankzExternal link URLz6Alternatively, use an external link for this promotion)rG   rI      )r	   rI   rH   descriptionz)Applies to internal page or external link)r@   rG   rI   F)rH   rI   editablec                 C   s   | j r| j j}n| j}|S r   )rF   titleexternal_link_textr   propr   r   r   rM   }   s    
zSearchPromotion.titlec                 C   s   | j r| j }n| j}|S r   )rF   external_link_urlrO   r   r   r   link   s    zSearchPromotion.linkc                 C   s2   | j rd}nd}d| jj d| d | j d S )NrF   zexternal linkzSearchPromotion(query="z", z="z"))rF   r   r   rM   )r   labelr   r   r   __repr__   s    
zSearchPromotion.__repr__c                 C   s   | j j d| j S )Nz - )r   r   rM   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)r0   r1   r2   Zorderingr?   r@   r   r   r   r   rA      s   rA   N)r0   r1   r2   r   rB   r   rC   r   r?   rF   ZURLFieldrQ   r3   rN   Z	TextFieldrK   rD   rU   r4   rM   rR   rT   r%   rA   r   r   r   r   rE   `   sD   


rE   )r<   Zdjango.confr   Z	django.dbr   Zdjango.utilsr   Zdjango.utils.translationr   r?   Zwagtail.search.utilsr   r   ZModelr   r   rE   r   r   r   r   <module>   s   <