| 
									
										
										
										
											2020-10-05 13:50:33 +02:00
										 |  |  | from searx.data import bangs_loader | 
					
						
							| 
									
										
										
										
											2020-07-03 15:25:04 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | # bangs data coming from the following url convert to json with | 
					
						
							|  |  |  | # https://raw.githubusercontent.com/jivesearch/jivesearch/master/bangs/bangs.toml | 
					
						
							|  |  |  | # https://pseitz.github.io/toml-to-json-online-converter/ | 
					
						
							|  |  |  | # NOTE only use the get_bang_url | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | bangs_data = {} | 
					
						
							| 
									
										
										
										
											2020-10-05 13:50:33 +02:00
										 |  |  | for bang in bangs_loader()['bang']: | 
					
						
							|  |  |  |     for trigger in bang["triggers"]: | 
					
						
							|  |  |  |         bangs_data[trigger] = {x: y for x, y in bang.items() if x != "triggers"} | 
					
						
							| 
									
										
										
										
											2020-07-03 15:25:04 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def get_bang_url(search_query): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Redirects if the user supplied a correct bang search. | 
					
						
							|  |  |  |     :param search_query: This is a search_query object which contains preferences and the submitted queries. | 
					
						
							|  |  |  |     :return: None if the bang was invalid, else a string of the redirect url. | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if search_query.external_bang: | 
					
						
							| 
									
										
										
										
											2020-08-11 16:25:03 +02:00
										 |  |  |         query = search_query.query | 
					
						
							| 
									
										
										
										
											2020-07-03 15:25:04 +02:00
										 |  |  |         bang = _get_bang(search_query.external_bang) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if bang and query: | 
					
						
							|  |  |  |             # TODO add region support. | 
					
						
							|  |  |  |             bang_url = bang["regions"]["default"] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return bang_url.replace("{{{term}}}", query) | 
					
						
							|  |  |  |     return None | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def _get_bang(user_bang): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Searches if the supplied user bang is available. Returns None if not found. | 
					
						
							|  |  |  |     :param user_bang: The parsed user bang. For example yt | 
					
						
							|  |  |  |     :return: Returns a dict with bangs data (check bangs_data.json for the structure) | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     return bangs_data.get(user_bang) |