
    i                     2   U d Z ddlZddlZddlZddlmZmZ ddlm	Z	m
Z
 ddlmZ ej                  rddlmZ ddlmZ dd	d
ddddZg Zee   ed<   dZdZd
ZdZeed<   dddddZeeef   ed<   deeej:                  f   defdZdeddddfdZ d d!defd"Z!y)#ar  `Wikimedia Commons`_ is a collection of more than 120 millions freely usable
media files to which anyone can contribute.

This engine uses the `MediaWiki query API`_, with which engines can be configured
for searching images, videos, audio, and other files in the Wikimedia.

.. _MediaWiki query API: https://commons.wikimedia.org/w/api.php?action=help&modules=query
.. _Wikimedia Commons: https://commons.wikimedia.org/


Configuration
=============

The engine has the following additional settings:

.. code:: yaml

   - name: wikicommons.images
     engine: wikicommons
     wc_search_type: image

   - name: wikicommons.videos
     engine: wikicommons
     wc_search_type: video

   - name: wikicommons.audio
     engine: wikicommons
     wc_search_type: audio

   - name: wikicommons.files
     engine: wikicommons
     wc_search_type: file


Implementations
===============

    N)	urlencodeunquote)html_to_texthumanize_bytes)EngineResults)SXNG_Response)OnlineParamszhttps://commons.wikimedia.org/Q565z'https://commons.wikimedia.org/w/api.phpTFJSON)websitewikidata_idofficial_api_documentationuse_official_apirequire_api_keyresults
categories
    wc_search_typezbitmap|drawingvideoaudiozmultimedia|office|archive|3d)imager   r   fileSEARCH_TYPESengine_settingsreturnc                     | j                  d      t        vrHt        j                  d| j                  d      dj	                  t        j                                      yy)zpInitialization of the Wikimedia engine, checks if the value configured in
    :py:obj:`wc_search_type` is valid.r   z/wc_search_type: %s isn't a valid file type (%s),FT)getr   loggererrorjoinkeys)r   s    */root/searxng/searx/engines/wikicommons.pysetupr%   P   sS     +,L@= 01HH\&&()	

     queryparamsr	   c                     d}|d   dk7  r|d   j                  d      d   }t        t           }d|ddd	d
dt        t        |d   dz
  z  d| d|  ddd}t         dt        |d       |d<   y )Nensearxng_localeall-r   jsonr'   zinfo|imageinfosearch6snippetpageno   z	filetype: zurl|size|mime180)formatuselangactionprop	generatorgsrnamespacegsrpropgsrlimit	gsroffset	gsrsearchiipropiiurlheight?z:|)safeurl)splitr   r   number_of_results
wc_api_urlr   )r'   r(   r7   filetypeargss        r$   requestrJ   ^   s    G5()*005a8N+H  %&&*:Q*>? 
!E73!!D$ "l!Id$>#?@F5Mr&   respr   c                    t               }| j                         }|j                  di       j                  di       j                         }|D ]  }|j                  dg       s|d   d   }|d   j	                  dd      j                  dd	      d   }t        |d
         }|d   }|d   }	|d   }
|d   }|j                  d      }|rt        |      }d }|j                  d      }|r 	 t        j                  t        |            }t        dk(  rZ|j                  |j                  j                  |||||
t!        t#        j$                  |	      j&                        |	|             t        dk(  rF|j                  |j                  j)                  d||||d   ||d    d|d    |d   |	             nt        dk(  r2|j                  |j                  j)                  d||||	|             t        dk(  s|j                  |j                  j+                  d||||	|              |S # t        $ r Y 9w xY w) Nr'   pages	imageinfor   titlezFile:r   .r3   r1   descriptionurlrD   mimethumburlsizeduration)secondsr   )rO   rD   contentrT   mimetypefilenameembedded	thumbnailr   zimages.htmlwidthz x height)	templaterO   rD   rW   img_srcthumbnail_src
resolution
img_formatfilesizer   zvideos.html)r^   rO   rD   rW   
iframe_srclengthr   zdefault.html)r^   rO   rD   rW   	audio_srcre   )r   r.   r   valuesreplacersplitr   r   datetime	timedeltaintOverflowErrorr   addtypesFiler   pathlibPathnameLegacyResult
MainResult)rK   res	json_datarM   itemrN   rO   rW   rD   	media_urlrX   r[   rT   rU   rV   s                  r$   responserz   x   s~   
/C		IMM'2&**7B7>>@E PxxR(%a(	']**7B7>>sAFqItI/-."5)	!&)":.	}}V$!$'D }}Z0#--c'lC V#GG		#%$W\\)%<%A%AB&'  	 W$GG		&&*#%e,"+"+G"4!5S89L8MN(0! ' 
 W$GG		&&*#(# ' 	 W$GG		$$+#'# % 	 aPd Jy ! s   *H66	II)"__doc__typingtrj   rq   urllib.parser   r   searx.utilsr   r   searx.result_typesr   TYPE_CHECKINGsearx.extended_typesr   searx.search.processorsr	   aboutr   liststr__annotations__pagingrF   rG   r   r   dictAnyboolr%   rJ   rz    r&   r$   <module>r      s   %N    + 4 ,??24 0"K	 
DI 	 6
  *	 d38n 4QUU
+  A3 A A4 A4X? X} Xr&   