from datetime import datetime, date, timedelta import json from urllib import response from dateutil.relativedelta import relativedelta import os from flask import Flask, render_template, redirect, request, url_for, jsonify, Response import jinja_partials from flask_htmx import HTMX import minify_html from urllib.parse import urlparse from flask_socketio import SocketIO app = Flask(__name__) # TODO CHANGE SECRET KEY TO ENVIRONMENT VARIABLE app.config['SECRET_KEY'] = 'secret!' jinja_partials.register_extensions(app) htmx = HTMX(app) socketio = SocketIO(app, cors_allowed_origins='*') @app.after_request def response_minify(response): """ minify html response to decrease site traffic """ if response.content_type == u'text/html; charset=utf-8': response.set_data( minify_html.minify(response.get_data( as_text=True), minify_js=True, remove_processing_instructions=True) ) return response return response @socketio.on('message') def handle_message(data): print('server ts: ' + datetime.datetime.now().replace( microsecond=0).isoformat() + ', message: ' + data) @app.route("/api/status", methods=['GET', 'POST']) def status(): req_data = save_request(request) resp = Response(json.dumps(req_data, indent=4, default=str), mimetype='application/json') return resp def save_request(request): req_data = {} req_data['http'] = f"{request.method} {request.url}" req_data['json'] = request.json req_data['headers'] = dict(request.headers) return req_data if __name__ == '__main__': # Bind to PORT if defined, otherwise default to 5000. port = int(os.environ.get('PORT', 5000)) socketio.run(app, host='127.0.0.1', port=port)