forked from zaclys/searxng
		
	[fix] implement a JSONEncoder for the json format
This patch implements a simple JSONEncoder just to fix #2502 / on the long term SearXNG needs a data schema for the result items and a json generator for the result list. Closes: https://github.com/searxng/searxng/issues/2505 Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
This commit is contained in:
		
							parent
							
								
									fa1ef9a07b
								
							
						
					
					
						commit
						86db08793b
					
				
					 1 changed files with 12 additions and 1 deletions
				
			
		| 
						 | 
					@ -143,6 +143,17 @@ def write_csv_response(csv: CSVWriter, rc: ResultContainer) -> None:
 | 
				
			||||||
        csv.writerow([row.get(key, '') for key in keys])
 | 
					        csv.writerow([row.get(key, '') for key in keys])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class JSONEncoder(json.JSONEncoder):
 | 
				
			||||||
 | 
					    def default(self, o):
 | 
				
			||||||
 | 
					        if isinstance(o, datetime):
 | 
				
			||||||
 | 
					            return o.isoformat()
 | 
				
			||||||
 | 
					        if isinstance(o, timedelta):
 | 
				
			||||||
 | 
					            return o.total_seconds()
 | 
				
			||||||
 | 
					        if isinstance(o, set):
 | 
				
			||||||
 | 
					            return list(o)
 | 
				
			||||||
 | 
					        return super().default(o)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def get_json_response(sq: SearchQuery, rc: ResultContainer) -> str:
 | 
					def get_json_response(sq: SearchQuery, rc: ResultContainer) -> str:
 | 
				
			||||||
    """Returns the JSON string of the results to a query (``application/json``)"""
 | 
					    """Returns the JSON string of the results to a query (``application/json``)"""
 | 
				
			||||||
    results = rc.number_of_results
 | 
					    results = rc.number_of_results
 | 
				
			||||||
| 
						 | 
					@ -156,7 +167,7 @@ def get_json_response(sq: SearchQuery, rc: ResultContainer) -> str:
 | 
				
			||||||
        'suggestions': list(rc.suggestions),
 | 
					        'suggestions': list(rc.suggestions),
 | 
				
			||||||
        'unresponsive_engines': get_translated_errors(rc.unresponsive_engines),
 | 
					        'unresponsive_engines': get_translated_errors(rc.unresponsive_engines),
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    response = json.dumps(x, default=lambda item: list(item) if isinstance(item, set) else item)
 | 
					    response = json.dumps(x, cls=JSONEncoder)
 | 
				
			||||||
    return response
 | 
					    return response
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue