-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
96 changed files
with
2,674 additions
and
629 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
FROM mcr.microsoft.com/playwright | ||
FROM python:3.10.9-slim | ||
|
||
RUN apt update | ||
RUN apt install python3-pip -y | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,32 +1,118 @@ | ||
# Import the server module | ||
import http.server | ||
import webbrowser | ||
from pathlib import Path | ||
|
||
# Used "tomlkit" instead of "toml" because it doesn't change formatting on "dump" | ||
import tomlkit | ||
from flask import ( | ||
Flask, | ||
redirect, | ||
render_template, | ||
request, | ||
send_from_directory, | ||
url_for, | ||
) | ||
|
||
import utils.gui_utils as gui | ||
|
||
# Set the hostname | ||
HOST = "localhost" | ||
# Set the port number | ||
PORT = 4000 | ||
|
||
# Define class to display the index page of the web server | ||
class PythonServer(http.server.SimpleHTTPRequestHandler): | ||
def do_GET(self): | ||
if self.path == "/GUI": | ||
self.path = "index.html" | ||
return http.server.SimpleHTTPRequestHandler.do_GET(self) | ||
|
||
|
||
# Declare object of the class | ||
webServer = http.server.HTTPServer((HOST, PORT), PythonServer) | ||
# Print the URL of the webserver, new =2 opens in a new tab | ||
print(f"Server started at http://{HOST}:{PORT}/GUI/") | ||
webbrowser.open(f"http://{HOST}:{PORT}/GUI/", new=2) | ||
print("Website opened in new tab") | ||
print("Press Ctrl+C to quit") | ||
try: | ||
# Run the web server | ||
webServer.serve_forever() | ||
except KeyboardInterrupt: | ||
# Stop the web server | ||
webServer.server_close() | ||
print("The server is stopped.") | ||
exit() | ||
# Configure application | ||
app = Flask(__name__, template_folder="GUI") | ||
|
||
# Configure secret key only to use 'flash' | ||
app.secret_key = b'_5#y2L"F4Q8z\n\xec]/' | ||
|
||
|
||
# Ensure responses aren't cached | ||
@app.after_request | ||
def after_request(response): | ||
response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate" | ||
response.headers["Expires"] = 0 | ||
response.headers["Pragma"] = "no-cache" | ||
return response | ||
|
||
|
||
# Display index.html | ||
@app.route("/") | ||
def index(): | ||
return render_template("index.html", file="videos.json") | ||
|
||
|
||
@app.route("/backgrounds", methods=["GET"]) | ||
def backgrounds(): | ||
return render_template("backgrounds.html", file="backgrounds.json") | ||
|
||
|
||
@app.route("/background/add", methods=["POST"]) | ||
def background_add(): | ||
# Get form values | ||
youtube_uri = request.form.get("youtube_uri").strip() | ||
filename = request.form.get("filename").strip() | ||
citation = request.form.get("citation").strip() | ||
position = request.form.get("position").strip() | ||
|
||
gui.add_background(youtube_uri, filename, citation, position) | ||
|
||
return redirect(url_for("backgrounds")) | ||
|
||
|
||
@app.route("/background/delete", methods=["POST"]) | ||
def background_delete(): | ||
key = request.form.get("background-key") | ||
gui.delete_background(key) | ||
|
||
return redirect(url_for("backgrounds")) | ||
|
||
|
||
@app.route("/settings", methods=["GET", "POST"]) | ||
def settings(): | ||
config_load = tomlkit.loads(Path("config.toml").read_text()) | ||
config = gui.get_config(config_load) | ||
|
||
# Get checks for all values | ||
checks = gui.get_checks() | ||
|
||
if request.method == "POST": | ||
# Get data from form as dict | ||
data = request.form.to_dict() | ||
|
||
# Change settings | ||
config = gui.modify_settings(data, config_load, checks) | ||
|
||
return render_template( | ||
"settings.html", file="config.toml", data=config, checks=checks | ||
) | ||
|
||
|
||
# Make videos.json accessible | ||
@app.route("/videos.json") | ||
def videos_json(): | ||
return send_from_directory("video_creation/data", "videos.json") | ||
|
||
|
||
# Make backgrounds.json accessible | ||
@app.route("/backgrounds.json") | ||
def backgrounds_json(): | ||
return send_from_directory("utils", "backgrounds.json") | ||
|
||
|
||
# Make videos in results folder accessible | ||
@app.route("/results/<path:name>") | ||
def results(name): | ||
return send_from_directory("results", name, as_attachment=True) | ||
|
||
|
||
# Make voices samples in voices folder accessible | ||
@app.route("/voices/<path:name>") | ||
def voices(name): | ||
return send_from_directory("GUI/voices", name, as_attachment=True) | ||
|
||
|
||
# Run browser and start the app | ||
if __name__ == "__main__": | ||
webbrowser.open(f"http://{HOST}:{PORT}", new=2) | ||
print("Website opened in new tab. Refresh if it didn't load.") | ||
app.run(port=PORT) |
Oops, something went wrong.