Spaces:
Running
Running
File size: 1,947 Bytes
4ac3af3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | """Serve the demo locally, supporting byte ranges used by model metadata probes."""
from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer
from pathlib import Path
import os
import re
os.chdir(Path(__file__).resolve().parent.parent)
class Handler(SimpleHTTPRequestHandler):
def send_head(self):
self.byte_range=None
path=Path(self.translate_path(self.path))
match=re.fullmatch(r'bytes=(\d+)-(\d*)',self.headers.get('Range',''))
if match and path.is_file():
size=path.stat().st_size
start=int(match[1]);end=min(int(match[2]) if match[2] else size-1,size-1)
if start>=size or end<start:
self.send_response(416);self.send_header('Content-Range',f'bytes */{size}');self.end_headers();return None
f=path.open('rb');f.seek(start);self.byte_range=end-start+1
self.send_response(206)
self.send_header('Content-Type',self.guess_type(str(path)))
self.send_header('Content-Range',f'bytes {start}-{end}/{size}')
self.send_header('Content-Length',str(end-start+1));self.end_headers();return f
return super().send_head()
def end_headers(self):
self.send_header('Accept-Ranges','bytes')
super().end_headers()
def copyfile(self,source,outputfile):
try:
remaining=self.byte_range
if remaining is None:return super().copyfile(source,outputfile)
while remaining:
data=source.read(min(1024*1024,remaining))
if not data:break
outputfile.write(data);remaining-=len(data)
except (BrokenPipeError,ConnectionResetError):pass
def log_message(self,format,*args):
if args and str(args[1]) not in ('200','206'):super().log_message(format,*args)
print('Open http://127.0.0.1:8765/web/',flush=True)
ThreadingHTTPServer(('127.0.0.1',8765),Handler).serve_forever()
|