-
Notifications
You must be signed in to change notification settings - Fork 0
/
hotreload_server.py
78 lines (61 loc) · 1.92 KB
/
hotreload_server.py
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import time
import math
from flask import Flask
from flask import Response
from flask import request
from flask_cors import CORS
from werkzeug.utils import redirect
from waitress import serve
app = Flask(__name__)
CORS(app)
port = 7438
@app.route('/')
def homepage():
homepage = '''
<h1>Theme Kit Hot Reload Server</h1>
<a href="/notify">/notify</a> - Ping when a file has been updated or when the content was last acquired.<br>
<a href="/updated">/updated</a> - An epoch timestamp indicating when the content was last updated.
'''
return homepage
@app.route('/notify', methods=['get', 'post'])
def notify():
epoch = math.floor(time.time())
print(f'Notified @ {str(epoch)}')
with open('hotreload/timestamp.txt', 'w') as file:
file.write(str(epoch))
return str(epoch)
@app.route('/updated')
def updated():
with open('hotreload/timestamp.txt', 'r') as file:
epoch = file.read()
return epoch
@app.route('/hotreload.js')
def hotreload():
handle = open('hotreload/hotreload.js')
source = handle.read()
handle.close()
return Response(source, mimetype='text/javascript')
@app.route('/report')
def reporturl():
url = request.args.get('url')
if not url or 'http' not in url or len(url) > 200:
return url or 'error: No URL Reported!'
with open('../url.txt', 'w') as file:
file.write(url)
epoch = math.floor(time.time())
print(f'Reported @ {str(epoch)} - URL {url} was reported!')
return 'Reported'
@app.route('/preview')
def preview():
with open('../url.txt', 'r') as file:
url = file.read()
return redirect(url)
def start_server():
title = 'Theme Kit Hot Reload Flask Server'
intro = [title, '-' * len(title), 'https://github.com/benfaerber/theme-kit-hot-reload']
print('\n'.join(intro))
serve(app, host='0.0.0.0', port=port)
def main():
start_server()
if __name__ == "__main__":
main()