WebHost: Standardize some 404 redirects (#4642)

This commit is contained in:
massimilianodelliubaldini
2025-04-04 17:11:45 -04:00
committed by GitHub
parent d8576e72eb
commit 1bec68df4d
11 changed files with 28 additions and 13 deletions

View File

@@ -35,6 +35,12 @@ def start_playing():
@app.route('/games/<string:game>/info/<string:lang>') @app.route('/games/<string:game>/info/<string:lang>')
@cache.cached() @cache.cached()
def game_info(game, lang): def game_info(game, lang):
try:
world = AutoWorldRegister.world_types[game]
if lang not in world.web.game_info_languages:
raise KeyError("Sorry, this game's info page is not available in that language yet.")
except KeyError:
return abort(404)
return render_template('gameInfo.html', game=game, lang=lang, theme=get_world_theme(game)) return render_template('gameInfo.html', game=game, lang=lang, theme=get_world_theme(game))
@@ -52,6 +58,12 @@ def games():
@app.route('/tutorial/<string:game>/<string:file>/<string:lang>') @app.route('/tutorial/<string:game>/<string:file>/<string:lang>')
@cache.cached() @cache.cached()
def tutorial(game, file, lang): def tutorial(game, file, lang):
try:
world = AutoWorldRegister.world_types[game]
if lang not in [tut.link.split("/")[1] for tut in world.web.tutorials]:
raise KeyError("Sorry, the tutorial is not available in that language yet.")
except KeyError:
return abort(404)
return render_template("tutorial.html", game=game, file=file, lang=lang, theme=get_world_theme(game)) return render_template("tutorial.html", game=game, file=file, lang=lang, theme=get_world_theme(game))

View File

@@ -6,7 +6,7 @@ from typing import Dict, Union
from docutils.core import publish_parts from docutils.core import publish_parts
import yaml import yaml
from flask import redirect, render_template, request, Response from flask import redirect, render_template, request, Response, abort
import Options import Options
from Utils import local_path from Utils import local_path
@@ -142,7 +142,10 @@ def weighted_options_old():
@app.route("/games/<string:game>/weighted-options") @app.route("/games/<string:game>/weighted-options")
@cache.cached() @cache.cached()
def weighted_options(game: str): def weighted_options(game: str):
try:
return render_options_page("weightedOptions/weightedOptions.html", game, is_complex=True) return render_options_page("weightedOptions/weightedOptions.html", game, is_complex=True)
except KeyError:
return abort(404)
@app.route("/games/<string:game>/generate-weighted-yaml", methods=["POST"]) @app.route("/games/<string:game>/generate-weighted-yaml", methods=["POST"])
@@ -197,7 +200,10 @@ def generate_weighted_yaml(game: str):
@app.route("/games/<string:game>/player-options") @app.route("/games/<string:game>/player-options")
@cache.cached() @cache.cached()
def player_options(game: str): def player_options(game: str):
try:
return render_options_page("playerOptions/playerOptions.html", game, is_complex=False) return render_options_page("playerOptions/playerOptions.html", game, is_complex=False)
except KeyError:
return abort(404)
# YAML generator for player-options # YAML generator for player-options

View File

@@ -42,10 +42,5 @@ window.addEventListener('load', () => {
scrollTarget?.scrollIntoView(); scrollTarget?.scrollIntoView();
} }
}); });
}).catch((error) => {
console.error(error);
gameInfo.innerHTML =
`<h2>This page is out of logic!</h2>
<h3>Click <a href="${window.location.origin}">here</a> to return to safety.</h3>`;
}); });
}); });

View File

@@ -49,10 +49,5 @@ window.addEventListener('load', () => {
scrollTarget?.scrollIntoView(); scrollTarget?.scrollIntoView();
} }
}); });
}).catch((error) => {
console.error(error);
tutorialWrapper.innerHTML =
`<h2>This page is out of logic!</h2>
<h3>Click <a href="${window.location.origin}/tutorial">here</a> to return to safety.</h3>`;
}); });
}); });

View File

@@ -121,6 +121,7 @@ class ALTTPWeb(WebWorld):
) )
tutorials = [setup_en, setup_de, setup_es, setup_fr, msu, msu_es, msu_fr, plando, oof_sound] tutorials = [setup_en, setup_de, setup_es, setup_fr, msu, msu_es, msu_fr, plando, oof_sound]
game_info_languages = ["en", "fr"]
class ALTTPWorld(World): class ALTTPWorld(World):

View File

@@ -41,6 +41,7 @@ class AquariaWeb(WebWorld):
) )
tutorials = [setup, setup_fr] tutorials = [setup, setup_fr]
game_info_languages = ["en", "fr"]
class AquariaWorld(World): class AquariaWorld(World):

View File

@@ -31,6 +31,7 @@ class CliqueWebWorld(WebWorld):
) )
tutorials = [setup_en, setup_de] tutorials = [setup_en, setup_de]
game_info_languages = ["en", "de"]
class CliqueWorld(World): class CliqueWorld(World):

View File

@@ -34,6 +34,7 @@ class DLCqwebworld(WebWorld):
["Deoxis"] ["Deoxis"]
) )
tutorials = [setup_en, setup_fr] tutorials = [setup_en, setup_fr]
game_info_languages = ["en", "fr"]
class DLCqworld(World): class DLCqworld(World):

View File

@@ -43,6 +43,7 @@ class FFMQWebWorld(WebWorld):
) )
tutorials = [setup_en, setup_fr] tutorials = [setup_en, setup_fr]
game_info_languages = ["en", "fr"]
class FFMQWorld(World): class FFMQWorld(World):

View File

@@ -130,6 +130,7 @@ class OOTWeb(WebWorld):
tutorials = [setup, setup_fr, setup_de] tutorials = [setup, setup_fr, setup_de]
option_groups = oot_option_groups option_groups = oot_option_groups
game_info_languages = ["en", "de"]
class OOTWorld(World): class OOTWorld(World):

View File

@@ -41,6 +41,7 @@ class Starcraft2WebWorld(WebWorld):
) )
tutorials = [setup_en, setup_fr] tutorials = [setup_en, setup_fr]
game_info_languages = ["en", "fr"]
class SC2World(World): class SC2World(World):