desktop support

This commit is contained in:
2025-07-29 12:50:35 -07:00
parent b08eab62cc
commit 68ef7c1591
23 changed files with 385 additions and 61 deletions

View File

@@ -1,10 +1,24 @@
import logging
import os
import pathlib
import sys
import flask
import redis
app = flask.Flask("seagull-game", root_path="/app")
log = logging.getLogger()
pipe_stderr = logging.StreamHandler(sys.stderr)
pipe_stderr.setLevel(logging.DEBUG)
log.addHandler(pipe_stderr)
if getattr(sys, "frozen", False):
path_appdir = pathlib.Path(sys._MEIPASS)
else:
path_appdir = pathlib.Path.cwd()
log.critical(path_appdir)
desktop_mode = False
app = flask.Flask("seagull-game", root_path=path_appdir)
orig_url_for = app.url_for
#REDIS_HOST="stub-implementation.example.net"
@@ -16,9 +30,8 @@ orig_url_for = app.url_for
def url_for_override(endpoint, *posargs, _anchor=None, _method=None, _scheme=None, _external=None, self=app, **values):
if endpoint == "static":
# bandaid for #1
if not os.path.exists("/app/static/" + values["filename"]):
sys.stderr.write("WARN:: requested {0} from local file, but it doesn't exist in this container. Redirecting to CDN...\n".format(values["filename"]))
sys.stderr.flush()
if not os.path.exists(path_appdir / "static" / values["filename"]):
log.warning("requested {0} from local file, but it doesn't exist in this container. Redirecting to CDN...\n".format(values["filename"]))
return "https://cdn.otl-hga.net/seagull/" + values["filename"]
return orig_url_for(endpoint, *posargs, _anchor=_anchor, _method=_method, _scheme=_scheme, _external=_external, **values)
@@ -51,5 +64,5 @@ def render_base_context():
base_context_live = True
@app.route("/core/ping")
def aws_healthcheck_ping():
def healthcheck_ping():
return flask.Response("OK", content_type="text/plain")

32
app/pylocal/desktop.py Normal file
View File

@@ -0,0 +1,32 @@
import pathlib
from . import core
path_storagedir = pathlib.Path()
class JS_API:
debug_mode = False
def load_data(self, key):
if not (path_storagedir / key).exists():
return None
with open(path_storagedir / key) as fd_datafile:
try:
return fd_datafile.read()
except Exception as exc:
core.log.error(f"problem loading {key} (from {path_storagedir}): {exc}")
return None
def save_data(self, key, data):
with open(path_storagedir / key, "w") as fd_datafile:
try:
fd_datafile.write(data)
except Exception as exc:
core.log.error(f"problem saving {key} (to {path_storagedir}): {exc}")
def delete_data(self, key):
if (path_storagedir / key).exists():
(path_storagedir / key).unlink()
api = JS_API()

7
app/pylocal/dev.py Normal file
View File

@@ -0,0 +1,7 @@
import flask
from . import core
@core.app.route("/dev/get-toolbox")
def dev_toolbox():
return flask.render_template("dev_toolbox.j2", ipaddr=flask.request.remote_addr, desktop=core.desktop_mode)

View File

@@ -7,7 +7,11 @@ import flask
from . import core
def generate_flavor_text():
proc_rant = subprocess.run(["rant", "/app/rant/flavor.rant"], capture_output=True)
if core.desktop_mode:
rant_path = core.path_appdir / "opt/rant/bin/rant"
else:
rant_path = "rant" # rely on OS PATH
proc_rant = subprocess.run([rant_path, (core.path_appdir / "rant/flavor.rant").as_posix()], capture_output=True)
return proc_rant.stdout.decode()
class TickEvent(object):
@@ -36,11 +40,13 @@ def tick():
result["event_type"] = random.choices(ticktypes, weights=tickweights)[0]
match result["event_type"]:
case 0:
pass
case 1: # FLAVOR
result["log"] = generate_flavor_text()
case 10: # ENCHUMAN
result["items"] = [] # TODO: implement items
result["items"] = {} # TODO: implement items
case _:
print("undefined tick: {0}".format(result["event_type"]))
core.log.warning("undefined tick: {0}".format(result["event_type"]))
return flask.Response(json.dumps(result), status=200, content_type="application/json")