init
This commit is contained in:
104
server.py
Normal file
104
server.py
Normal file
@@ -0,0 +1,104 @@
|
||||
from os import environ
|
||||
import argparse
|
||||
from flask import Flask, request, make_response, send_from_directory, jsonify
|
||||
from config import PrinterConfig
|
||||
|
||||
argument_parser = argparse.ArgumentParser()
|
||||
argument_parser.add_argument("--address", type=str, required=False, default="0.0.0.0")
|
||||
argument_parser.add_argument("--port", type=int, required=False, default=8005)
|
||||
|
||||
args = argument_parser.parse_args()
|
||||
|
||||
printer_config = PrinterConfig()
|
||||
app = Flask(__name__)
|
||||
|
||||
|
||||
@app.route("/")
|
||||
def index_route():
|
||||
return send_from_directory("static", "index.html")
|
||||
|
||||
|
||||
@app.route("/config", methods=["GET", "POST"])
|
||||
def config_route():
|
||||
request_type = None
|
||||
if "Accept" in request.headers:
|
||||
if "text/html" in request.headers["Accept"]:
|
||||
request_type = "html"
|
||||
elif "application/json" in request.headers["Accept"]:
|
||||
request_type = "json"
|
||||
|
||||
print(request_type)
|
||||
if request.method == "GET" and request_type == "html":
|
||||
# return config html page
|
||||
return send_from_directory("static", "config.html")
|
||||
elif request.method == "GET" and request_type == "json":
|
||||
# render config as JSON
|
||||
print(get_config())
|
||||
return jsonify(get_config())
|
||||
elif request.method == "POST" and request.is_json:
|
||||
# accept JSON form with new parameters
|
||||
errors = {"critical": False, "errors": {}}
|
||||
try:
|
||||
request_data = request.json
|
||||
print(request_data)
|
||||
except Exception:
|
||||
errors["errors"]["json"] = "Could not decode message as json"
|
||||
errors["critical"] = True
|
||||
|
||||
request_params = {}
|
||||
if "address" in request_data:
|
||||
request_params["address"] = request_data["address"]
|
||||
if "port" in request_data:
|
||||
port = request_data["port"]
|
||||
if isinstance(port, int) and 0 < port <= 65535:
|
||||
request_params["port"] = port
|
||||
else:
|
||||
errors["errors"]["parseint"] = "Could not parse port number as an integer"
|
||||
errors["critical"] = True
|
||||
|
||||
response = jsonify(errors)
|
||||
if errors["critical"]:
|
||||
response.status_code = 422
|
||||
else:
|
||||
response.status_code = 200
|
||||
set_config(**request_params)
|
||||
return response
|
||||
|
||||
|
||||
def get_config():
|
||||
return {
|
||||
"address": printer_config.printer_address,
|
||||
"port": printer_config.printer_port,
|
||||
"profile": printer_config.printer_profile,
|
||||
"can_print": can_print(),
|
||||
}
|
||||
|
||||
|
||||
def set_config(address: str = None, port: int = None):
|
||||
if address is None:
|
||||
printer_config.printer_address = None
|
||||
else:
|
||||
printer_config.printer_address = address
|
||||
if port is None:
|
||||
printer_config.printer_port = 9100
|
||||
else:
|
||||
printer_config.printer_port = port
|
||||
|
||||
|
||||
def can_print():
|
||||
return printer_config.complete
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
printer_config.load()
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
try:
|
||||
app.run(host=args.address, port=args.port)
|
||||
except KeyboardInterrupt:
|
||||
pass
|
||||
|
||||
printer_config.save()
|
||||
exit(0)
|
||||
Reference in New Issue
Block a user