
    i                     x    d Z ddlmZ ddlmZ ddlmZ ddddd	d
dZg dZdZ	dZ
dZ eg d      ZdefdZd Zy)zCargo search on crates.io    )OrderedDict)	urlencode)parserzhttps://crates.io/Nzhttps://crates.io/data-accessTFJSON)websitewikidata_idofficial_api_documentationuse_official_apirequire_api_keyresults)itpackagescargo
   zhttps://crates.io/api/v1/crates))homepagezProject homepage)documentationDocumentation)
repositoryzSource codequeryc                 N    t        |d   | t        d      }t         d| |d<   |S )Npageno)pageqper_page?url)r   	page_size
search_url)r   paramsargss      %/root/searxng/searx/engines/crates.pyrequestr"   #   s1    fX.U	RSD!l!D6*F5MM    c                 p   g }| j                         d   D ]  }|j                  d      }t        j                  |      }i }t        j                         D ]  \  }}|j                  |      }|s|||<     |j                  dd|d    |d   |d   |d   |d   |d   xs |d	   xs |d
   ||d	        |S )Ncrates
updated_atzpackages.htmlzhttps://crates.io/crates/namekeywordsdescriptionnewest_versionmax_versionmax_stable_version)	templater   titlepackage_nametagscontentversionpublishedDatelinks)jsongetr   parselinked_termsitemsappend)respr   packagepublished_dater4   kvls           r!   responserA   *   s    G99;x( 
 \2n5 &&( 	DAqAAa	
 	+276?2CD  '
+"=1"#34o8NoRYZnRo!/
	

2 Nr#   )__doc__collectionsr   urllib.parser   dateutilr   about
categoriespagingr   r   r8   strr"   rA    r#   r!   <module>rK      sd     # "  $"A	 )
 
	.
3 r#   