o
    g;                     @   s  d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
mZmZ d dlmZmZ d dlmZ d	d
lmZmZmZmZmZ d dlmZ d dlmZ ejZG dd dej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Z"G dd dejZ#G dd deZ$G dd dejZ%G dd deZ&G dd  d eZ'G d!d" d"eZ(G d#d$ d$ejZ)G d%d& d&ejZ*ej+e*d'Z,dS )(    )ceilN)DjangoObjectType)Q)Promise)CategoryLoaderKeywordLoader
NewsLoader)LanguageSiteSettings)
PageDetail   )CategoryTranslateNewsCategoryKeywordNewsTranslate)settings)cachec                   @   s   e Zd ZejddZe Ze Ze Ze Z	e Z
e Ze Ze Zdd Zdd Zdd Zd	d
 Zdd Zdd Zdd Zdd ZdS )BlogPostMicroDataArticledefault_valuec                 C      | j S Ntitleselfinfo r   ,/var/www/Entralon-Web-Backend/blog/schema.pyresolve_headline      z"BlogPostMicroData.resolve_headlinec                 C   s   d| j j S )Nhttps://file.entralon.com/newsimager   r   r   r    resolve_image   s   zBlogPostMicroData.resolve_imagec                 C      | j j S r   )r%   
created_at	isoformatr   r   r   r    resolve_date_published       z(BlogPostMicroData.resolve_date_publishedc                 C   r(   r   )r%   
updated_atr*   r   r   r   r    resolve_date_modified#   r,   z'BlogPostMicroData.resolve_date_modifiedc                 C      dS NEntralonr   r   r   r   r    resolve_author&      z BlogPostMicroData.resolve_authorc                 C   r   r   summaryr   r   r   r    resolve_description)   r"   z%BlogPostMicroData.resolve_descriptionc                 C   r/   r0   r   r   r   r   r    resolve_publisher,   r3   z#BlogPostMicroData.resolve_publisherc                 C   s   d| j j d| jj S )Nhttps://entralon.com//news/)languagecoder%   slugr   r   r   r    resolve_main_entity_of_page/   s   z-BlogPostMicroData.resolve_main_entity_of_pageN)__name__
__module____qualname__grapheneStringtypeheadliner&   date_publisheddate_modifiedauthordescription	publishermain_entity_of_pager!   r'   r+   r.   r2   r6   r7   r=   r   r   r   r    r      s$    r   c                   @   s2   e Zd ZejddZeeZe Z	e Z
dS )BlogListingMicroDataItemListr   N)r>   r?   r@   rA   rB   rC   Listr   itemsnumber_of_itemsitem_list_orderr   r   r   r    rK   2   s
    
rK   c                   @   sp   e Zd ZdZe Ze Ze Ze Z	e Z
e Ze Ze Ze Ze Ze Ze ZdS )MetaTagsTypezSEO Meta Tags SchemaN)r>   r?   r@   __doc__rA   rB   r   rH   keywordsog_titleog_descriptionog_imageog_typetwitter_cardtwitter_titletwitter_descriptiontwitter_imagecanonical_urlr   r   r   r    rQ   8   s    rQ   c                   @      e Zd ZG dd dZdS )CategoryTypec                   @      e Zd ZeZg dZdS )zCategoryType.Metaidr<   r   N)r>   r?   r@   r   modelfieldsr   r   r   r    MetaH       rd   Nr>   r?   r@   rd   r   r   r   r    r^   G       r^   c                   @   s"   e Zd ZG dd dZdd ZdS )CategoryTranslateTypec                   @   r_   )zCategoryTranslateType.Metar`   N)r>   r?   r@   r   rb   rc   r   r   r   r    rd   M   re   rd   c                 C      | j jS r   )categoryr<   r   r   r   r    resolve_slugQ      z"CategoryTranslateType.resolve_slugN)r>   r?   r@   rd   rk   r   r   r   r    rh   L   s    rh   c                   @       e Zd ZeeZeeZ	dS )FilterCategoryTypeN)
r>   r?   r@   rA   rM   rh   nodeFieldr   	page_infor   r   r   r    rn   T       
rn   c                   @   r]   )KeywordTypec                   @   r_   )zKeywordType.Metar`   N)r>   r?   r@   r   rb   rc   r   r   r   r    rd   Z   re   rd   Nrf   r   r   r   r    rs   Y   rg   rs   c                   @   rm   )FilterKeywordTypeN)
r>   r?   r@   rA   rM   rs   ro   rp   r   rq   r   r   r   r    rt   ^   rr   rt   c                   @   r]   )NewsTypec                   @   r_   )zNewsType.Meta)ra   r<   developmentr   r&   rS   rj   r)   N)r>   r?   r@   r   rb   rc   r   r   r   r    rd   d   re   rd   Nrf   r   r   r   r    ru   c   rg   ru   c                   @   sB   e Zd Ze ZG dd dZdd Zdd Zdd Z	d	d
 Z
dS )NewsCardTranslateTypec                   @   r_   )zNewsCardTranslateType.Meta)
ra   r<   r   r&   r5   rH   rS   rj   r)   	read_timeNr>   r?   r@   r   rb   rc   r   r   r   r    rd   j   re   rd   c                 C   ri   r   r%   ra   r   r   r   r    
resolve_idn   rl   z NewsCardTranslateType.resolve_idc                 C   ri   r   r%   r<   r   r   r   r    rk   q   rl   z"NewsCardTranslateType.resolve_slugc                 C   ri   r   r$   r   r   r   r    r'   t   rl   z#NewsCardTranslateType.resolve_imagec                 C      | j d d  dS Nd   z ...r4   r   r   r   r    resolve_summaryw      z%NewsCardTranslateType.resolve_summaryN)r>   r?   r@   rA   rB   r&   rd   r{   rk   r'   r   r   r   r   r    rw   h   s    rw   c                   @   sv   e Zd Ze ZeeZe	 Z
eeZG dd dZdd Zdd Zdd Zd	d
 Zdd Zdd Zdd ZdS )NewsTranslateTypec                   @   r_   )zNewsTranslateType.Meta)ra   r<   r   r&   r5   rH   rS   rj   r)   rx   related_newsNry   r   r   r   r    rd      re   rd   c                 C   ri   r   rz   r   r   r   r    r{      rl   zNewsTranslateType.resolve_idc                 C   ri   r   r|   r   r   r   r    rk      rl   zNewsTranslateType.resolve_slugc                 C   ri   r   r$   r   r   r   r    r'      rl   zNewsTranslateType.resolve_imagec                 C   r}   r~   r4   r   r   r   r    r      r   z!NewsTranslateType.resolve_summaryc                 C   s   t jddddj| j| jdj| jd}|	 dk r?t jddddjt
| jdt
| j d	B | jd
j| jd}|dd d S )Nr%   r:   rj   rS   )r:   rj   )ra      )rj   )keywords__inr:   ?)r   objectsselect_relatedprefetch_relatedfilterr:   rj   excludera   countr   rS   allorder_by)r   r   r%   r   r   r    resolve_related_news   s4   
 z&NewsTranslateType.resolve_related_newsc                 C   sT   dd| j d| jj d| jj d| jj | j dddd	dd
ddd| jd	S )Nhttps://schema.orgNewsArticlehttps://dev.entralon.com/r9   r#   Personr1   )@typenameOrganizationImageObjectz%https://file.entralon.com/favicon.ico)r   url)r   r   logo)	@contextr   rD   r   r&   datePublishedrG   rI   articleBody)	r   r:   r;   r%   r<   r&   r)   r*   rH   r   r   r   r    resolve_micro_data   s"   z$NewsTranslateType.resolve_micro_datac                 C   s   d dd | j D }d}| d| jj d| jj }| j d| jd d || j| jd d d	| jj	 d
d| j| jd d d	| jj	 |dS )Nz, c                 S   s   g | ]}|j qS r   r   ).0kr   r   r    
<listcomp>   s    z7NewsTranslateType.resolve_meta_tags.<locals>.<listcomp>zhttps://entralon.com/r9   z | Entralon Blog   r#   articlesummary_large_imager   rH   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   )
joinrS   r   r:   r;   r%   r<   r   r5   r&   )r   r   rS   base_url	canonicalr   r   r    resolve_meta_tags   s    
z#NewsTranslateType.resolve_meta_tagsN)r>   r?   r@   rA   rB   r&   rM   rw   r   
JSONString
micro_datarp   rQ   	meta_tagsrd   r{   rk   r'   r   r   r   r   r   r   r   r    r   z   s    

r   c                   @   s:   e Zd ZeeZeeZ	e
 ZeeZdd ZdS )FilterNewsTypec              	   C   sP   g }| d D ]}| ddd|jj d|jj |j|j d qdd|d	S )
Nro   ListItemr   r   r9   )r   positionr   r   r   r   rL   )r   r   itemListElement)appendr:   r;   r%   r<   r   r)   r*   )r   r   	item_listitemr   r   r    r      s   
z!FilterNewsType.resolve_micro_dataN)r>   r?   r@   rA   rM   r   ro   rp   r   rq   r   r   rQ   r   r   r   r   r   r    r      s    


r   c                
   @   s   e Zd Zejee e e e e e e dZ	eje
e ejdddZejee e e e dZejee e e e dZedd ZdddZdddZdddZdddZdS )Query)r:   page	page_sizesearchfeaturedrj   keywordT)required)r:   r<   )r:   r   r   r   c                   C   s   t  t t dS )N)news_loadercategory_loaderkeyword_loader)r   r   r   r   r   r   r    get_loaders   s   zQuery.get_loadersenr   
   Nc	                 C   s.  d| d| d| d| d| d| d| }	t |	}
|
r |
S |dkr&d}d|d |  }|| }tjj|d }|d u rHtjjdd }tdd	|d
}|d urZ|t|dM }|d urn|dkrn|t|dt|dB M }|d ur}|dkr}|t|dM }|d ur|dkr|t|dM }tjdddd	dd|}|
 }t|| }||kr|}|dk rd}d|d |  }|| }||k }d|j d}d}d}d}|r||dkrdnd d| 7 }d| d}d| d }|r||dkrdnd d!| 7 }|d"| d#7 }|d$| d%7 }|r1||dkrdnd d&| 7 }|d"| d'7 }|d$| d(7 }|dkrT||dkr>dnd d)| 7 }|d*| 7 }|d*| 7 }|dkr]d+| }||7 }|d,7 }d-tj j }||| ||dk||||d.||d/|||d0d1||||d2d3}t |	|t |S )4Nnews_query__2   r   r   r;   r   TF)news__is_publishnews__is_deletedr:   )news__is_featured )news__title__icontains)"news__translates__title__icontains)news__category__slug)news__keywords__slugr%   r:   rj   category__categoryrS   news__keywordsr8   z/newszSales & Investment Newsz?list of latest Sales & Investment News and updates on Entralon.&zsearch=zsearch z in Newszlist of search z/ in latest Sales & Investment News on Entralon.z	category=z in z	 categoryz*list of latest Sales & Investment News in z category on Entralon.zkeyword=z keywordz keyword on Entralon.zpage=z | Page r   z | Entralonr#   has_next_pagehas_previous_pagecurrent_pager   r   pages_countz7blog, news, entralon, updates, new homes, new apartmentwebsiter5   r   )ro   rq   r   )r   getr	   r   r   firstr   r   r   r   r   r   r;   r
   default_news_imageset
CACHE_TIME)r   r   r:   r   r   r   r   rj   r   	cache_keycached_resultstartendlangfiltersqsr   r   r   r\   r   rH   qpr&   outr   r   r    resolve_news   s   .
	 
 
	zQuery.resolve_newsc                 C   sb   t  }tjj|d }|d u rtjjdd }tjj||ddd }|r/||j S d S )Nr   r   TF)
news__slugr:   r   r   )	r   r	   r   r   r   r   loadra   r   )r   r   r<   r:   loadersr   r%   r   r   r    resolve_news_detailT  s   zQuery.resolve_news_detailc              	      s   |dkrd}t jj|d }|d u rt jjdd }d|d |  }|| }tjjd|d}	|rC|dkrC|	t|d	t|d
B }	t   fdd|	|| D }
t|
	 ||	
 k |dk|||	
 t|	
 | ddS )N   r   r   r   r   T)category__is_activater:   r   title__icontains)translates__title__icontainsc                       g | ]}  |jqS r   r   ra   )r   rj   r   r   r    r   o      z/Query.resolve_news_category.<locals>.<listcomp>r   ro   rq   )r	   r   r   r   r   r   r   r   r   r   r   r   )r   r   r:   r   r   r   r   r   r   r   promisesr   r   r    resolve_news_categoryb  s*   
zQuery.resolve_news_categoryc              	      s   |dkrd}d|d |  }|| }t jj|d }|d u r(t jjdd }tjj|d}	|r=|dkr=|	t|d}	t   fd	d
|	|| D }
|
|
 ||		 k |dk|||		 t
|		 | ddS )Nr   r   r   r   r   r   r   r   c                    r   r   r   )r   r   r   r   r    r     r   z.Query.resolve_news_keyword.<locals>.<listcomp>r   r   )r	   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r:   r   r   r   r   r   r   r   r    resolve_news_keyword~  s*   
zQuery.resolve_news_keyword)r   r   r   NNNN)r   )r   r   r   N)r   r   Nr   )r>   r?   r@   rA   rp   r   rB   IntBooleanr%   r   news_detailrn   news_categoryrt   news_keywordstaticmethodr   r   r   r   r   r   r   r   r    r      s    6$$


[
r   )query)-mathr   rA   graphene_djangor   django.db.modelsr   promiser   blog.dataloadersr   r   r   main.modelsr	   r
   main.graphene_toolsr   modelsr   r   r   r   r   django.confr   django.core.cacher   r   
ObjectTyper   rK   rQ   r^   rh   rn   rs   rt   ru   rw   r   r   r   Schemaschemar   r   r   r    <module>   s6    #U 2