77
88from typing import List , Union , Dict
99
10- from ale_py .roms .utils import (
11- SupportedPackage as _SupportedPackage ,
12- SupportedEntryPoint as _SupportedEntryPoint ,
13- SupportedDirectory as _SupportedDirectory ,
14- )
10+ from ale_py .roms .utils import SupportedPackage , SupportedEntryPoint , SupportedDirectory
1511
1612# Precedence is as follows:
1713# 1. Internal ROMs
1814# 2. External ROMs
1915# 3. ROMs from atari-py.roms
2016# 4. ROMs from atari-py-roms.roms
21- _ROM_PLUGINS : List [
22- Union [_SupportedPackage , _SupportedEntryPoint , _SupportedDirectory ]
23- ] = [
24- _SupportedPackage ("ale_py.roms" ),
25- _SupportedEntryPoint ("ale_py.roms" ),
26- _SupportedPackage ("atari_py.atari_roms" ),
27- _SupportedPackage ("atari_py_roms.atari_roms" ),
17+ ROM_PLUGINS : List [Union [SupportedPackage , SupportedEntryPoint , SupportedDirectory ]] = [
18+ SupportedPackage ("ale_py.roms" ),
19+ SupportedEntryPoint ("ale_py.roms" ),
20+ SupportedPackage ("atari_py.atari_roms" ),
21+ SupportedPackage ("atari_py_roms.atari_roms" ),
2822]
2923
3024# Environment variable for ROM discovery.
3125# ale-py will search for supported ROMs in:
3226# ${ALE_PY_ROM_DIR}/*.bin
33- _ROM_DIRECTORY_ENV_KEY = "ALE_PY_ROM_DIR"
34- _ROM_DIRECTORY_ENV_VALUE = os .environ .get (_ROM_DIRECTORY_ENV_KEY , None )
27+ ROM_DIRECTORY_ENV_KEY = "ALE_PY_ROM_DIR"
28+ ROM_DIRECTORY_ENV_VALUE = os .environ .get (ROM_DIRECTORY_ENV_KEY , None )
3529
36- if _ROM_DIRECTORY_ENV_VALUE is not None :
37- _ROM_PLUGINS .append (_SupportedDirectory ( _ROM_DIRECTORY_ENV_VALUE ))
30+ if ROM_DIRECTORY_ENV_VALUE is not None :
31+ ROM_PLUGINS .append (SupportedDirectory ( ROM_DIRECTORY_ENV_VALUE ))
3832
3933
40- def _resolve_roms () -> List [str ]:
34+ def resolve_roms () -> Dict [str , pathlib . Path ]:
4135 roms : Dict [str , pathlib .Path ] = {}
42- for package in _ROM_PLUGINS :
36+ for package in ROM_PLUGINS :
4337
4438 try :
4539 # Resolve supported / unsupported roms
@@ -62,7 +56,7 @@ def _resolve_roms() -> List[str]:
6256 )
6357
6458 if (
65- isinstance (package , _SupportedPackage )
59+ isinstance (package , SupportedPackage )
6660 and package .package .startswith ("atari_py" )
6761 and len (roms_delta ) > 0
6862 ):
@@ -91,9 +85,19 @@ def _resolve_roms() -> List[str]:
9185 return roms
9286
9387
94- _RESOLVED_ROMS = _resolve_roms ()
88+ # Resolve all ROMs
89+ ROMS = resolve_roms ()
90+ __all__ = list (ROMS .keys ())
9591
96- # Update module
97- globals ().update (_RESOLVED_ROMS )
98- # Export resolved ROMs
99- __all__ = list (_RESOLVED_ROMS .keys ())
92+
93+ def __dir__ () -> List [str ]:
94+ return list (ROMS .keys ())
95+
96+
97+ def __getattr__ (name : str ) -> pathlib .Path :
98+ if name not in ROMS :
99+ raise AttributeError (
100+ f"ROM { name } not found. Available ROMs: { ',' .join (__all__ )} ."
101+ )
102+
103+ return ROMS [name ]
0 commit comments