|  |  |  | @ -1,4 +1,6 @@ | 
			
		
	
		
			
				
					|  |  |  |  | import http.server | 
			
		
	
		
			
				
					|  |  |  |  | import os | 
			
		
	
		
			
				
					|  |  |  |  | import threading | 
			
		
	
		
			
				
					|  |  |  |  | import time | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | from functools import wraps | 
			
		
	
	
		
			
				
					|  |  |  | @ -76,3 +78,25 @@ def read_segment_list(segment_list_path): | 
			
		
	
		
			
				
					|  |  |  |  |     seg_list = f.read().splitlines() | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   return [(platform[2:], segment) for platform, segment in zip(seg_list[::2], seg_list[1::2], strict=True)] | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def with_http_server(func, handler=http.server.BaseHTTPRequestHandler, setup=None): | 
			
		
	
		
			
				
					|  |  |  |  |   @wraps(func) | 
			
		
	
		
			
				
					|  |  |  |  |   def inner(*args, **kwargs): | 
			
		
	
		
			
				
					|  |  |  |  |     host = '127.0.0.1' | 
			
		
	
		
			
				
					|  |  |  |  |     server = http.server.HTTPServer((host, 0), handler) | 
			
		
	
		
			
				
					|  |  |  |  |     port = server.server_port | 
			
		
	
		
			
				
					|  |  |  |  |     t = threading.Thread(target=server.serve_forever) | 
			
		
	
		
			
				
					|  |  |  |  |     t.start() | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     if setup is not None: | 
			
		
	
		
			
				
					|  |  |  |  |       setup(host, port) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     try: | 
			
		
	
		
			
				
					|  |  |  |  |       return func(*args, f'http://{host}:{port}', **kwargs) | 
			
		
	
		
			
				
					|  |  |  |  |     finally: | 
			
		
	
		
			
				
					|  |  |  |  |       server.shutdown() | 
			
		
	
		
			
				
					|  |  |  |  |       server.server_close() | 
			
		
	
		
			
				
					|  |  |  |  |       t.join() | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   return inner | 
			
		
	
	
		
			
				
					|  |  |  | 
 |