forked from mirror/Archipelago
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:
21
Generate.py
21
Generate.py
@@ -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:
|
||||||
|
|||||||
15
Options.py
15
Options.py
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user