add custom python3 'serve' script based on http.server
[~bandali/bndl.org] / serve
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)