File: DownloadServer.py

package info (click to toggle)
cmake 4.2.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 152,344 kB
  • sloc: ansic: 403,894; cpp: 303,807; sh: 4,097; python: 3,582; yacc: 3,106; lex: 1,279; f90: 538; asm: 471; lisp: 375; cs: 270; java: 266; fortran: 239; objc: 215; perl: 213; xml: 198; makefile: 108; javascript: 83; pascal: 63; tcl: 55; php: 25; ruby: 22
file content (53 lines) | stat: -rw-r--r-- 1,833 bytes parent folder | download | duplicates (6)
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
48
49
50
51
52
53
from http.server import HTTPServer, BaseHTTPRequestHandler
import argparse
import time
import subprocess
import sys
import os
import threading
args = None
outerthread = None

barrier = threading.Barrier(2)

class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        barrier.wait()
        self.send_response(200)
        self.end_headers()
        data = b'D'

        if args.speed_limit:
            slow_deadline = time.time()+args.limit_duration

            while time.time() < slow_deadline:
                self.wfile.write(data)
                if args.speed_limit:
                    time.sleep(1.1)

        data = data * 100
        self.wfile.write(data)
        self.close_connection = True

def runServer(fileName):
    httpd = HTTPServer(('localhost', 0), SimpleHTTPRequestHandler)
    with open(fileName,"w") as f:
        f.write('http://localhost:{}/test'.format(httpd.socket.getsockname()[1]))
    httpd.handle_request()
    os.remove(fileName)

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('--speed_limit', help='transfer rate limitation', action='store_true',default=False)
    parser.add_argument('--limit_duration', help='duration of the transfer rate limitation',default=1, type=float)
    parser.add_argument('--file', help='file to write the url to connect to')
    parser.add_argument('--subprocess', action='store_true')
    args = parser.parse_args()
    if not args.subprocess:
        subprocess.Popen([sys.executable]+sys.argv+['--subprocess'],stdin=subprocess.DEVNULL, stderr=subprocess.DEVNULL,stdout=subprocess.DEVNULL)
    else:
        serverThread = threading.Thread(target=runServer,args=(args.file,))
        serverThread.daemon = True
        serverThread.start()
        barrier.wait(60)
        serverThread.join(20)