#!/usr/bin/env python3
import http.server, socketserver, os
FILE = "train_ayurveda_jupyter.py"
HOST, PORT = "0.0.0.0", 8769
class H(http.server.SimpleHTTPRequestHandler):
    def do_GET(self):
        if self.path != "/" + FILE:
            self.send_error(404, "Only %s" % FILE); return
        fp = os.path.join(os.getcwd(), FILE)
        if not os.path.exists(fp): self.send_error(404); return
        sz = os.path.getsize(fp)
        rng = self.headers.get('Range')
        if rng:
            try:
                b = rng.strip().split('=')[1]
                s,e = b.split('-')
                s = int(s) if s else 0
                e = int(e) if e else sz-1
            except: s,e = 0,sz-1
            self.send_response(206)
            self.send_header('Content-Type', 'text/plain')
            self.send_header('Accept-Ranges', 'bytes')
            self.send_header('Content-Length', str(e-s+1))
            self.send_header('Content-Range', 'bytes %d-%d/%d' % (s,e,sz))
            self.send_header('Content-Disposition', 'attachment; filename="%s"' % FILE)
            self.end_headers()
            with open(fp,'rb') as f:
                f.seek(s); rem = e-s+1
                while rem>0:
                    d = f.read(min(65536,rem))
                    if not d: break
                    self.wfile.write(d); rem -= len(d)
        else:
            self.send_response(200)
            self.send_header('Content-Type', 'text/plain')
            self.send_header('Accept-Ranges', 'bytes')
            self.send_header('Content-Length', str(sz))
            self.send_header('Content-Disposition', 'attachment; filename="%s"' % FILE)
            self.end_headers()
            with open(fp,'rb') as f:
                while True:
                    d = f.read(65536)
                    if not d: break
                    self.wfile.write(d)
with socketserver.TCPServer((HOST,PORT), H) as s:
    print("Serving %s on http://%s:%d" % (FILE,HOST,PORT))
    s.serve_forever()
