from typing import Final, List, Dict from BaseClasses import Location class LocationData: name: str = "" id: int = 0 difficulty: int = 0 tags: Final[tuple[str, ...]] def __init__(self, name, id, difficulty, tags=None): if tags is None: tags = [] self.name = name self.id = id self.difficulty = difficulty self.tags = tags class GLLocation(Location): game: str = "Gauntlet Legends" def import_locations() -> List[LocationData]: import orjson import pkgutil return [LocationData(**loc) for loc in orjson.loads(pkgutil.get_data(__name__, "json/locations.json").decode("utf-8"))] def get_locations_by_tags(tags: str | List[str]) -> List[LocationData]: if isinstance(tags, str): tags = [tags] return [loc for loc in all_locations if any(tag in loc.tags for tag in tags)] all_locations: List[LocationData] = import_locations() location_table: Dict[str, int] = {locData.name: locData.id for locData in all_locations} location_id_to_name: Dict[int, str] = {locData.id: locData.name for locData in all_locations if locData.id is not None} locationName_to_data: Dict[str, LocationData] = {locData.name: locData for locData in all_locations}