From 267d9234e5d45157f4493e843eb10463880a0fff Mon Sep 17 00:00:00 2001 From: alwaysintreble Date: Mon, 19 Sep 2022 15:40:15 -0500 Subject: [PATCH] core: fix options with "random" as default value not generating (#1033) * core: fix options with "random" as default value not generating when option is missing from the player yaml, Using this in #893 and tested there. * remove if * OptionSets default to frozenset so handle that * range had some specific instances of assuming default as a valid value so change this here to call the from_any * isinstance instead of type Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> Co-authored-by: black-sliver <59490463+black-sliver@users.noreply.github.com> --- Generate.py | 2 +- Options.py | 9 +++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/Generate.py b/Generate.py index 763471e9..f048e543 100644 --- a/Generate.py +++ b/Generate.py @@ -455,7 +455,7 @@ def handle_option(ret: argparse.Namespace, game_weights: dict, option_key: str, else: player_option.verify(AutoWorldRegister.world_types[ret.game], ret.name, plando_options) else: - setattr(ret, option_key, option(option.default)) + setattr(ret, option_key, option.from_any(option.default)) # call the from_any here to support default "random" def roll_settings(weights: dict, plando_options: PlandoSettings = PlandoSettings.bosses): diff --git a/Options.py b/Options.py index 11ec46f2..49f044d8 100644 --- a/Options.py +++ b/Options.py @@ -483,7 +483,7 @@ class Range(NumericOption): if text.startswith("random"): return cls.weighted_range(text) elif text == "default" and hasattr(cls, "default"): - return cls(cls.default) + return cls.from_any(cls.default) elif text == "high": return cls(cls.range_end) elif text == "low": @@ -494,7 +494,7 @@ class Range(NumericOption): and text in ("true", "false"): # these are the conditions where "true" and "false" make sense if text == "true": - return cls(cls.default) + return cls.from_any(cls.default) else: # "false" return cls(0) return cls(int(text)) @@ -698,10 +698,7 @@ class OptionSet(Option[typing.Set[str]], VerifyKeys): @classmethod def from_any(cls, data: typing.Any): - if type(data) == list: - cls.verify_keys(data) - return cls(data) - elif type(data) == set: + if isinstance(data, (list, set, frozenset)): cls.verify_keys(data) return cls(data) return cls.from_text(str(data))