Core: Fix some typing errors (#4995)

* Fix some type errors in Generate and Options

* Add type parameter to new hint and fix whitespace errors

* Update identifier style
This commit is contained in:
Duck
2026-02-02 11:55:57 -07:00
committed by GitHub
parent 4cb518930c
commit 3b1971be66
2 changed files with 22 additions and 22 deletions

View File

@@ -23,7 +23,7 @@ from BaseClasses import seeddigits, get_seed, PlandoOptions
from Utils import parse_yamls, version_tuple, __version__, tuplize_version from Utils import parse_yamls, version_tuple, __version__, tuplize_version
def mystery_argparse(argv: list[str] | None = None): def mystery_argparse(argv: list[str] | None = None) -> argparse.Namespace:
from settings import get_settings from settings import get_settings
settings = get_settings() settings = get_settings()
defaults = settings.generator defaults = settings.generator
@@ -68,7 +68,7 @@ def mystery_argparse(argv: list[str] | None = None):
args.weights_file_path = os.path.join(args.player_files_path, args.weights_file_path) args.weights_file_path = os.path.join(args.player_files_path, args.weights_file_path)
if not os.path.isabs(args.meta_file_path): if not os.path.isabs(args.meta_file_path):
args.meta_file_path = os.path.join(args.player_files_path, args.meta_file_path) args.meta_file_path = os.path.join(args.player_files_path, args.meta_file_path)
args.plando: PlandoOptions = PlandoOptions.from_option_string(args.plando) args.plando = PlandoOptions.from_option_string(args.plando)
return args return args
@@ -205,7 +205,7 @@ def main(args=None) -> tuple[argparse.Namespace, int]:
else: else:
yaml[category_name][key] = option yaml[category_name][key] = option
settings_cache: dict[str, tuple[argparse.Namespace, ...]] = {fname: None for fname in weights_cache} settings_cache: dict[str, tuple[argparse.Namespace, ...] | None] = {fname: None for fname in weights_cache}
if args.sameoptions: if args.sameoptions:
for fname, yamls in weights_cache.items(): for fname, yamls in weights_cache.items():
try: try:
@@ -225,7 +225,7 @@ def main(args=None) -> tuple[argparse.Namespace, int]:
player_path_cache: dict[int, str] = {} player_path_cache: dict[int, str] = {}
for player in range(1, args.multi + 1): for player in range(1, args.multi + 1):
player_path_cache[player] = player_files.get(player, args.weights_file_path) player_path_cache[player] = player_files.get(player, args.weights_file_path)
name_counter = Counter() name_counter: Counter[str] = Counter()
args.player_options = {} args.player_options = {}
player = 1 player = 1
@@ -241,13 +241,10 @@ def main(args=None) -> tuple[argparse.Namespace, int]:
try: try:
# Use the cached settings object if it exists, otherwise roll settings within the try-catch # Use the cached settings object if it exists, otherwise roll settings within the try-catch
# Invariant: settings_cache[path] and weights_cache[path] have the same length # Invariant: settings_cache[path] and weights_cache[path] have the same length
settingsObject: argparse.Namespace = ( cached = settings_cache[path]
settings_cache[path][doc_index] settings_object: argparse.Namespace = (cached[doc_index] if cached else roll_settings(yaml, args.plando))
if settings_cache[path]
else roll_settings(yaml, args.plando)
)
for k, v in vars(settingsObject).items(): for k, v in vars(settings_object).items():
if v is not None: if v is not None:
try: try:
getattr(args, k)[player] = v getattr(args, k)[player] = v
@@ -365,7 +362,7 @@ class SafeFormatter(string.Formatter):
return kwargs.get(key, "{" + key + "}") return kwargs.get(key, "{" + key + "}")
def handle_name(name: str, player: int, name_counter: Counter): def handle_name(name: str, player: int, name_counter: Counter[str]):
name_counter[name.lower()] += 1 name_counter[name.lower()] += 1
number = name_counter[name.lower()] number = name_counter[name.lower()]
new_name = "%".join([x.replace("%number%", "{number}").replace("%player%", "{player}") for x in name.split("%%")]) new_name = "%".join([x.replace("%number%", "{number}").replace("%player%", "{player}") for x in name.split("%%")])
@@ -503,7 +500,7 @@ def roll_triggers(weights: dict, triggers: list, valid_keys: set) -> dict:
return weights return weights
def handle_option(ret: argparse.Namespace, game_weights: dict, option_key: str, option: type(Options.Option), plando_options: PlandoOptions): def handle_option(ret: argparse.Namespace, game_weights: dict, option_key: str, option: type[Options.Option], plando_options: PlandoOptions):
try: try:
if option_key in game_weights: if option_key in game_weights:
if not option.supports_weighting: if not option.supports_weighting:

View File

@@ -523,9 +523,9 @@ class Choice(NumericOption):
class TextChoice(Choice): class TextChoice(Choice):
"""Allows custom string input and offers choices. Choices will resolve to int and text will resolve to string""" """Allows custom string input and offers choices. Choices will resolve to int and text will resolve to string"""
value: typing.Union[str, int] value: str | int
def __init__(self, value: typing.Union[str, int]): def __init__(self, value: str | int):
assert isinstance(value, str) or isinstance(value, int), \ assert isinstance(value, str) or isinstance(value, int), \
f"'{value}' is not a valid option for '{self.__class__.__name__}'" f"'{value}' is not a valid option for '{self.__class__.__name__}'"
self.value = value self.value = value
@@ -546,7 +546,7 @@ class TextChoice(Choice):
return cls(text) return cls(text)
@classmethod @classmethod
def get_option_name(cls, value: T) -> str: def get_option_name(cls, value: str | int) -> str:
if isinstance(value, str): if isinstance(value, str):
return value return value
return super().get_option_name(value) return super().get_option_name(value)
@@ -906,7 +906,8 @@ class OptionDict(Option[typing.Dict[str, typing.Any]], VerifyKeys, typing.Mappin
else: else:
raise NotImplementedError(f"Cannot Convert from non-dictionary, got {type(data)}") raise NotImplementedError(f"Cannot Convert from non-dictionary, got {type(data)}")
def get_option_name(self, value): @classmethod
def get_option_name(cls, value):
return ", ".join(f"{key}: {v}" for key, v in value.items()) return ", ".join(f"{key}: {v}" for key, v in value.items())
def __getitem__(self, item: str) -> typing.Any: def __getitem__(self, item: str) -> typing.Any:
@@ -986,7 +987,8 @@ class OptionList(Option[typing.List[typing.Any]], VerifyKeys):
return cls(data) return cls(data)
return cls.from_text(str(data)) return cls.from_text(str(data))
def get_option_name(self, value): @classmethod
def get_option_name(cls, value):
return ", ".join(map(str, value)) return ", ".join(map(str, value))
def __contains__(self, item): def __contains__(self, item):
@@ -1011,7 +1013,8 @@ class OptionSet(Option[typing.Set[str]], VerifyKeys):
return cls(data) return cls(data)
return cls.from_text(str(data)) return cls.from_text(str(data))
def get_option_name(self, value): @classmethod
def get_option_name(cls, value):
return ", ".join(sorted(value)) return ", ".join(sorted(value))
def __contains__(self, item): def __contains__(self, item):