Commit | Line | Data |
---|---|---|
1742e668 AB |
1 | #!/usr/bin/env python3 |
2 | ||
3 | # Copyright (c) 2021 bandali | |
4 | # | |
5 | # Copying and distribution of this file, with or without modification, | |
6 | # are permitted in any medium without royalty provided the copyright | |
7 | # notice and this notice are preserved. This file is offered as-is, | |
8 | # without any warranty. | |
9 | ||
10 | import os | |
11 | from http.server import SimpleHTTPRequestHandler | |
12 | import socketserver | |
13 | ||
14 | try: | |
15 | PORT = int(os.getenv('PORT', 8000)) | |
16 | except ValueError: | |
17 | print('PORT must be in integer') | |
18 | exit(1) | |
19 | ||
20 | ADDR = os.getenv('ADDR', '127.0.0.1') | |
21 | ||
22 | class HttpRequestHandler(SimpleHTTPRequestHandler): | |
23 | extensions_map = dict(SimpleHTTPRequestHandler.extensions_map) | |
24 | extensions_map.update({'': 'text/plain;charset=UTF-8'}) | |
25 | extensions_map.update({'.txt': 'text/plain;charset=UTF-8'}) | |
26 | ||
27 | def do_GET(self): | |
28 | if not os.path.isfile(os.getcwd() + self.path): | |
29 | exts = ['html', 'txt'] | |
30 | for ext in exts: | |
31 | p = ".".join((self.path, ext)) | |
32 | if os.path.isfile("".join((os.getcwd(), p))): | |
33 | self.path = p | |
34 | break | |
35 | super().do_GET() | |
36 | ||
37 | class ReuseAddrTCPServer(socketserver.TCPServer): | |
38 | allow_reuse_address = True | |
39 | ||
40 | with ReuseAddrTCPServer((ADDR, PORT), HttpRequestHandler) as httpd: | |
41 | try: | |
42 | print("serving at port", PORT) | |
43 | httpd.serve_forever() | |
44 | except KeyboardInterrupt: | |
45 | pass | |
46 | except Exception as e: | |
47 | logger.exception(e) |