desktop support
This commit is contained in:
@@ -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
32
app/pylocal/desktop.py
Normal 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
7
app/pylocal/dev.py
Normal 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)
|
@@ -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")
|
Reference in New Issue
Block a user