scanbuddy/server/server.py

104 lines
2.3 KiB
Python
Raw Normal View History

2025-09-27 15:51:47 +02:00
#!/usr/bin/env python3
# Run this stuff with `waitress-serve --port=5000 --call server:create_app`
import os
import subprocess
from flask import Flask, request
app = Flask(__name__)
SCANBUDDY_COMMAND = ["bash", f"{os.getcwd()}/scanbuddy.bash"]
@app.route("/")
def hello_world():
2025-09-27 18:54:09 +02:00
return ("Scanbuddy server. Go to <ul>"
" <li><a href=\"scan\">scan</a></li>"
" <li><a href=\"unscan\">unscan</a></li>"
" <li><a href=\"dispatch\">dispatch</a></li>"
" <li><a href=\"clean\">clean</a></li>"
"</ul>")
2025-09-27 15:51:47 +02:00
@app.route("/scan")
def scan():
print("Scanning...")
command = SCANBUDDY_COMMAND + ["scan"]
duplex = request.args.get("duplex", "n") == 'y'
resolution = request.args.get("resolution", None)
if duplex:
print("Duplex: on")
command += ["-d"]
if resolution:
print(f"Res.: {int(resolution)}")
# turning the string to an int and back to a string should clean up the input
command += ["-r", f"{int(resolution)}"]
result = subprocess.run(command, stdout=subprocess.PIPE, text=True)
output = result.stdout.strip()
print("Scanbuddy output: ")
print(output)
return output
# return f"Scanning {'duplex' if duplex == 'y' else ''}..."
@app.route("/dispatch")
def dispatch():
print("Dispatching...")
command = SCANBUDDY_COMMAND + ["dispatch"]
# TODO: implement user
user = request.args.get("user", "")
result = subprocess.run(command, stdout=subprocess.PIPE, text=True)
output = result.stdout.strip()
print("Scanbuddy output: ")
print(output)
return output
@app.route("/unscan")
def unscan():
print("Unscanning...")
command = SCANBUDDY_COMMAND + ["unscan"]
result = subprocess.run(command, stdout=subprocess.PIPE, text=True)
output = result.stdout.strip()
print("Scanbuddy output: ")
print(output)
return output
@app.route("/clean")
def clean():
print("Cleaning...")
command = SCANBUDDY_COMMAND + ["clean"]
result = subprocess.run(command, stdout=subprocess.PIPE, text=True)
output = result.stdout.strip()
print("Scanbuddy output: ")
print(output)
return output
def create_app():
return app
def main():
from waitress import serve
2025-09-27 18:54:09 +02:00
print("Serving scanbuddy on port 5000")
2025-09-27 15:51:47 +02:00
serve(app, host="0.0.0.0", port=5000)
if __name__=='__main__':
main()