Ë
    [ƒ!j62  ã                   óŒ  — d dl Z d dlmZ d dlmZ d dlmZmZ d dl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 d d	lmZ d d
lmZ  G d„ dej2                  «      Z G d„ dej2                  «      Z ej8                  e«       G d„ dej:                  «      «       Z ej8                  e«       G d„ dej:                  «      «       Zy)é    N)ÚPath)Úsettings)ÚadminÚmessages)ÚredirectÚrender)ÚpathÚreverse)Úformat_html)ÚBlogArticleÚBlogArticleImageÚBlogGenerationLogÚBlogSettings)ÚBlogAutomationService)ÚShopifyBlogServicec                   ó    — e Zd ZeZdZdZdd„Zy)ÚBlogArticleImageInliner   )Ú	image_urlÚ
local_fileÚalt_textÚpositionÚgeneration_statusÚprompt_usedNc                  ó   — y©NF© ©ÚselfÚrequestÚobjs      ú1/var/www/html/shopify_to_digistore/blogs/admin.pyÚhas_add_permissionz)BlogArticleImageInline.has_add_permission   ó   € Øó    ©N)Ú__name__Ú
__module__Ú__qualname__r   ÚmodelÚextraÚreadonly_fieldsr"   r   r$   r!   r   r      s   „ Ø€EØ€Eð€Oôr$   r   c                   óf   — e Zd ZeZdZdZdZdZdZ	dZ
dZ ej                  d¬«      d	„ «       Zdd„Zy
)ÚBlogGenerationLogInliner   F©Úcollapse)z-created_at)ÚstepÚstatusÚdetails_displayÚ
created_atzGeneration logÚDetails©Údescriptionc                 óx   — |j                   syt        j                  |j                   dd¬«      }t        d|«      S )Nu   â€”é   F©ÚindentÚensure_asciizS<pre style="margin:0;max-width:48rem;white-space:pre-wrap;font-size:11px;">{}</pre>)ÚdetailsÚjsonÚdumpsr   )r   r    Útexts      r!   r2   z'BlogGenerationLogInline.details_display)   s7   € à�{Š{ØÜ�z‰z˜#Ÿ+™+¨a¸eÔDˆÜð(àó
ð 	
r$   Nc                  ó   — yr   r   r   s      r!   r"   z*BlogGenerationLogInline.has_add_permission4   r#   r$   r%   )r&   r'   r(   r   r)   r*   Ú
can_deleteÚclassesÚorderingr+   ÚfieldsÚverbose_name_pluralr   Údisplayr2   r"   r   r$   r!   r-   r-      sM   „ Ø€EØ€EØ€JØ€GØ€HØI€OØ@€FØ*Ðà€U‡]�]˜yÔ)ñ
ó *ð
ôr$   r-   c                   ó€   ‡ — e Zd ZdZdZdZdZdddifddd	ifd
ddifddddœffZee	gZ
d„ Zdˆ fd„	Zˆ fd„Zˆ fd„Zˆ xZS )ÚBlogArticleAdmin)ÚtitleÚtarget_keywordr1   Ú
meta_titleÚscheduled_dateÚshopify_article_idÚ	posted_at)r1   Úcalendar_week)rI   rJ   ÚslugrM   )ÚcontentrK   Úmeta_descriptionÚtagsrP   Úshopify_article_urlÚshopify_metafieldsÚ
word_countÚkeyword_densityÚgeneration_errorrN   r3   Ú
updated_atNrD   )rI   r1   rJ   Úsecondary_keywordsrL   rO   ÚlocalerX   zContent & SEO)rP   rK   rR   rS   rQ   rV   rW   ÚShopify)rM   rT   rU   Úfeatured_image_urlrN   Ú
Timestamps)r3   rY   r.   )rD   rB   c                  ó   — yr   r   ©r   r   s     r!   r"   z#BlogArticleAdmin.has_add_permission…   r#   r$   c                 ó¼   •— t         ‰| �  ||«      }|rH|j                  s|j                  t        j
                  k(  r|D ]  }t        |t        «      sŒd|_        Œ |S )Nr   )	ÚsuperÚget_inline_instancesrX   r1   r   ÚSTATUS_FAILEDÚ
isinstancer-   rB   )r   r   r    Ú	instancesÚinlineÚ	__class__s        €r!   rc   z%BlogArticleAdmin.get_inline_instancesˆ   sT   ø€ Ü‘GÑ0°¸#Ó>ˆ	Ù�C×(Ò(¨C¯J©J¼+×:SÑ:SÒ,SÛ#�Ü˜fÔ&=Õ>Ø%'�F•Nð $ð Ðr$   c                 óœ   •— |j                   xs dj                  «       }t        ‰| �  ||«       |rt	        j
                  |d|› d�«       y y )NÚ z,Deleted from Django and Shopify (article id z).)rM   Ústriprb   Údelete_modelr   Úsuccess)r   r   r    Ú
shopify_idrh   s       €r!   rl   zBlogArticleAdmin.delete_model�   sP   ø€ Ø×,Ñ,Ò2°×9Ñ9Ó;ˆ
Ü‰Ñ˜W cÔ*ÙÜ×ÑØØ>¸z¸lÈ"ÐMõð r$   c                 ó  •— |D �cg c]>  }|j                   xs dj                  «       r|j                   xs dj                  «       ‘Œ@ }}t        ‰| �  ||«       |r$t	        j
                  |dt        |«      › d�«       y y c c}w )Nrj   zDeleted z$ article(s) from Django and Shopify.)rM   rk   rb   Údelete_querysetr   rm   Úlen)r   r   Úquerysetr    Úshopify_idsrh   s        €r!   rp   z BlogArticleAdmin.delete_queryset™   s’   ø€ ñ  ó
á�Ø×&Ñ&Ò,¨"×3Ñ3Ô5ð ×#Ñ#Ò) r×0Ñ0Õ2Øð 	ð 
ô
 	‰Ñ ¨Ô2ÙÜ×ÑØØœ3˜{Ó+Ð,Ð,PÐQõð ùò
s   †ABr%   )r&   r'   r(   Úlist_displayÚlist_filterÚsearch_fieldsr+   Ú	fieldsetsr   r-   Úinlinesr"   rc   rl   rp   Ú__classcell__©rh   s   @r!   rH   rH   8   s£   ø„ ð€Lð .€KØM€Mð€Oð" àð 	ðð	
ð  àð ð
ð	
ð àð ðð	
ð Ø3ÀÑNð	
ðU.€Ið^ &Ð'>Ð?€Gòõô÷ð r$   rH   c            	       óú   ‡ — e Zd ZdZdZdZdddifdddifd	dd
ifdddifddddœfddddœffZ ej                  d¬«      d„ «       Z	 ej                  d¬«      d„ «       Z
d„ Zdd„Zdd„Zˆ fd„Zdˆ fd„	Zd„ Zˆ xZS ) ÚBlogSettingsAdminu?   Singleton settings â€” separate admin page for blog automation.z)admin/blogs/blogsettings/change_form.html)
Úexternal_blog_inventory_displayÚ"external_blog_inventory_updated_atÚexternal_blog_inventory_errorÚtrending_topics_displayÚtrending_topics_updated_atÚtrending_topics_errorÚlast_run_atÚlast_run_statusÚlast_run_errorrY   Ú
AutomationrD   )ÚenabledÚposts_per_weekÚinclude_imagesrƒ   r„   r…   r\   )Úshopify_blog_idÚ
store_nameÚstore_domainÚblog_author_namezExisting blog (live site))Úblog_list_urlzStore context)r6   ÚlanguageÚtone_descriptionÚtarget_audiencez&Existing blogs (cached by weekly cron)r.   )r}   r~   r   )rB   rD   z'Trending topics (cached by weekly cron))r€   r�   r‚   zExternal blog inventoryr5   c                 ót   — |j                   xs g }t        dt        j                  |dd¬«      d d xs d«      S ©NzM<pre style="margin:0;max-height:240px;overflow:auto;font-size:11px;">{}</pre>r8   Fr9   ià.  z[])Úexternal_blog_inventoryr   r=   r>   ©r   r    Údatas      r!   r}   z1BlogSettingsAdmin.external_blog_inventory_displayú   s>   € à×*Ñ*Ò0¨bˆÜØ[Ü�J‰J�t A°EÔ:¸6¸EÐBÒJÀdó
ð 	
r$   zTrending topicsc                 ót   — |j                   xs g }t        dt        j                  |dd¬«      d d xs d«      S r“   )Útrending_topicsr   r=   r>   r•   s      r!   r€   z)BlogSettingsAdmin.trending_topics_display  s>   € à×"Ñ"Ò( bˆÜØ[Ü�J‰J�t A°EÔ:¸6¸EÐBÒJÀdó
ð 	
r$   c                  ó   — yr   r   r`   s     r!   r"   z$BlogSettingsAdmin.has_add_permission
  r#   r$   c                  ó   — yr   r   r   s      r!   Úhas_delete_permissionz'BlogSettingsAdmin.has_delete_permission  r#   r$   c                 ó0   — t        t        ddg¬«      «      S )Núadmin:blogs_blogsettings_changeé   ©Úargs)r   r
   )r   r   Úextra_contexts      r!   Úchangelist_viewz!BlogSettingsAdmin.changelist_view  s   € ÜœÐ AÈÈÔLÓMÐMr$   c                 óŽ   •— t         ‰| �  «       }t        d| j                  j	                  | j
                  «      d¬«      g}||z   S )Nzactions/Úblogs_blogsettings_actions)Úname)rb   Úget_urlsr	   Ú
admin_siteÚ
admin_viewÚactions_view)r   ÚurlsÚcustomrh   s      €r!   r¦   zBlogSettingsAdmin.get_urls  sI   ø€ Ü‰wÑÓ!ˆäØØ—‘×*Ñ*¨4×+<Ñ+<Ó=Ø1ôð
ˆð ˜‰}Ðr$   c                 ó¨   •— |xs i }t        d«      |d<   	 t        j                  «       |d<   t        ‰| �  ||||«      S # t        $ r g |d<   Y Œ"w xY w)Nú admin:blogs_blogsettings_actionsÚactions_urlÚshopify_blogs)r
   r   Ú
list_blogsÚ	Exceptionrb   Úchangeform_view)r   r   Ú	object_idÚform_urlr¡   rh   s        €r!   r²   z!BlogSettingsAdmin.changeform_view  sh   ø€ Ø%Ò+¨ˆÜ'.Ð/QÓ'Rˆ�mÑ$ð	0Ü-?×-JÑ-JÓ-LˆM˜/Ñ*ô ‰wÑ& w°	¸8À]ÓSÐSøô ò 	0Ø-/ˆM˜/Ó*ð	0ús   —A  Á AÁAc                 ó~  — t        j                  «       }i | j                  j                  |«      ¥| j                  j
                  |t        ddg¬«      t        |j                  xs g «      t        |j                  xs g «      dœ¥}|j                  dk(  �ro|j                  j                  d«      }|dk(  rZ	 t        j                  |j                  «      }|rt!        j"                  |d«       nt!        j$                  |d	«       t5        d%«      S |dk(  rì|j                  j                  d«      dk(  }	 t)        j*                  |¬«      }t        d|d   g¬«      }	|rTt!        j"                  |t-        d|j                  dd«      |j                  dd«      |j                  dd«      |	«      «       nEt!        j"                  |t-        d|j                  dd«      |j                  d«      xs d|	«      «       t5        d%«      S |dk(  rôt/        |j                  j                  d«      xs |j0                  «      }
|j                  j                  d«      dk(  }|j                  j                  d«      dk(  }	 t)        j2                  |
||¬«      }|rt!        j"                  |d|› �«       nF|rt!        j"                  |d |› �«       n*t!        j"                  |d!|j                  d"g «      › d#�«       t5        d%«      S t5        d%«      S t7        |d&|«      S # t&        $ r-}t!        j$                  |d
|› �«       Y d }~t5        d%«      S d }~ww xY w# t&        $ r-}t!        j$                  |d|› �«       Y d }~t5        d%«      S d }~ww xY w# t&        $ r-}t!        j$                  |d$|› �«       Y d }~t5        d%«      S d }~ww xY w)'Nr�   rž   rŸ   )Úoptsr   Úsettings_urlÚ
live_countÚtrending_countÚPOSTÚactionÚtest_shopifyzShopify blog connection OK.zShopify connection failed.zConnection error: Úgenerate_and_publish_articleÚ
backgroundÚ1)r¾   zadmin:blogs_blogarticle_changeÚ
article_iduf   Planned â€œ{}â€�. Background job started (pid {}). Log: <code>{}</code>. <a href="{}">View article</a>rI   rj   Ú
worker_pidÚlog_pathu\   Published â€œ{}â€�. <a href="{}" target="_blank">Shopify</a> | <a href="{}">View article</a>rT   Ú#zGenerate and publish failed: Úrun_nowÚlimitÚsyncÚdry_run)rÅ   rÆ   rÇ   z	Dry run: zRun complete (sync): zAWeekly plan saved (research + trends + topics). Scheduled dates: Úscheduled_datesz(. Generation runs on each scheduled day.zRun failed: r­   z!admin/blogs/settings_actions.html)r   Úloadr§   Úeach_contextr)   Ú_metar
   rq   r”   r˜   Úmethodrº   Úgetr   Útest_connectionrŠ   r   rm   Úerrorr±   r   r½   r   Úintrˆ   Ú
run_weeklyr   r   )r   r   Úsettings_objÚcontextr»   ÚokÚexcr¾   ÚresultÚarticle_urlrÅ   rÆ   rÇ   s                r!   r©   zBlogSettingsAdmin.actions_view'  s«  € Ü#×(Ñ(Ó*ˆð
Ø�o‰o×*Ñ*¨7Ó3ð
à—J‘J×$Ñ$Ø$Ü#Ð$EÈQÈCÔPÜ˜l×BÑBÒHÀbÓIÜ! ,×">Ñ">Ò"DÀ"ÓEò
ˆð �>‰>˜VÓ#Ø—\‘\×%Ñ% hÓ/ˆFØ˜Ò'ðHÜ+×;Ñ;¸L×<XÑ<XÓY�BÙÜ ×(Ñ(¨Ð2OÕPä Ÿ™ wÐ0LÔMôt Ð>Ó?Ð?ðo Ð9Ò9Ø$Ÿ\™\×-Ñ-¨lÓ;¸sÑB�
ðSÜ2×OÑOØ#-ô�Fô #*Ø8ÀÀ|Ñ@TÐ?Uô#�Kñ "Ü ×(Ñ(Ø#Ü'ð!Và &§
¡
¨7°BÓ 7Ø &§
¡
¨<¸Ó <Ø &§
¡
¨:°rÓ :Ø +óõ
ô !×(Ñ(Ø#Ü'ð!Bà &§
¡
¨7°BÓ 7Ø &§
¡
Ð+@Ó AÒ HÀSØ +óô	ôB Ð>Ó?Ð?ð+ ˜9Ò$Ü˜GŸL™L×,Ñ,¨WÓ5ÒT¸×9TÑ9TÓU�Ø—|‘|×'Ñ'¨Ó/°3Ñ6�Ø!Ÿ,™,×*Ñ*¨9Ó5¸Ñ<�ðBÜ2×=Ñ=Ø#¨$¸ô�Fñ Ü ×(Ñ(¨°I¸f¸XÐ2FÕGÙÜ ×(Ñ(¨Ð4IÈ&ÈÐ2RÕSä ×(Ñ(Ø#ð0Ø06·
±
Ð;LÈbÓ0QÐ/Rð SEðEôô Ð>Ó?Ð?”8Ð>Ó?Ð?ä�gÐBÀGÓLÐLøôw !ò HÜ—N‘N 7Ð.@ÀÀÐ,F×GÐGôp Ð>Ó?Ð?ûðsHûôD !ò SÜ—N‘N 7Ð.KÈCÈ5Ð,Q×RÐRô, Ð>Ó?Ð?ûð/Sûô* !ò BÜ—N‘N 7¨l¸3¸%Ð,@×AÐAÜÐ>Ó?Ð?ûðBúsK   Â9AL Ä6CM É7A:N Ì	M
ÌMÍM
Í	NÍM>Í>NÎ	N<ÎN7Î7N<r%   )rj   N)r&   r'   r(   Ú__doc__Úchange_form_templater+   rw   r   rF   r}   r€   r"   r›   r¢   r¦   r²   r©   ry   rz   s   @r!   r|   r|   §   s  ø„ áIàFÐð€Oð àð ð	ð	
ð àð ðð
	
ð (ØÐ)Ð*ð	
ð
 àð ðð
	
ð 5à(ðñð
	
ð 6à(ðñð
	
ðg>€Ið@ €U‡]�]Ð8Ô9ñ
ó :ð
ð €U‡]�]Ð0Ô1ñ
ó 2ð
òóóNô	õTöNMr$   r|   ) r=   Úpathlibr   Údjango.confr   Údjango.contribr   r   Údjango.shortcutsr   r   Údjango.urlsr	   r
   Údjango.utils.htmlr   Úblogs.modelsr   r   r   r   Ú!blogs.services.automation_servicer   Ú#blogs.services.shopify_blog_servicer   ÚTabularInliner   r-   ÚregisterÚ
ModelAdminrH   r|   r   r$   r!   Ú<module>ræ      s¬   ðÛ Ý å  ß *ß -ß %Ý )ç WÓ WÝ CÝ Bô˜U×0Ñ0ô ô ˜e×1Ñ1ô ð2 €‡��Óôk�u×'Ñ'ó kó ðkð\ €‡��ÓôMM˜×(Ñ(ó MMó ñMMr$   