mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-10 13:33:24 -05:00
chore: declare scripts as a package
The modules are run directly, run with -m, and imported by the tests and the type checker. Only the first form puts this directory on the path, so the package marker carries the bootstrap the other two need; without it the first sibling import fails. Three tests hold the three forms open.
This commit is contained in:
1 parent
b8bdeec5ce
commit
306637d90e
2 files changed
+50
No files matched your search
@@ -0,0 +1,19 @@
|
||||
"""Build and verification tooling for the collection.
|
||||
|
||||
These modules are run as scripts (``python scripts/verify.py``), as modules
|
||||
(``python -m scripts.scraper.libretro_scraper``), and imported as a package by
|
||||
the tests and the type checker. The first form puts this directory on the path
|
||||
itself; the other two do not, so importing the package adds it. Without that,
|
||||
``import scripts.common`` fails on the first sibling import it reaches, and
|
||||
every absolute import between siblings would have to be rewritten to be
|
||||
relative -a change that would break running a script directly.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
_HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
if _HERE not in sys.path:
|
||||
sys.path.insert(0, _HERE)
|
||||
@@ -926,3 +926,34 @@ class FreshnessGuardMechanics(unittest.TestCase):
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
|
||||
class ScriptsImportThreeWays(unittest.TestCase):
|
||||
"""A script is run directly, run as a module, and imported as a package.
|
||||
|
||||
The three do not agree on what is on the path: only the first form adds
|
||||
the scripts directory. Adding the package marker without the bootstrap
|
||||
made `import scripts.common` fail on the first sibling import it reached.
|
||||
"""
|
||||
|
||||
def _run(self, *args: str):
|
||||
import subprocess
|
||||
|
||||
return subprocess.run(
|
||||
[sys.executable, *args],
|
||||
capture_output=True, text=True, cwd=str(ROOT), timeout=300,
|
||||
)
|
||||
|
||||
def test_imported_as_a_package(self):
|
||||
result = self._run(
|
||||
"-c", "import scripts.common, scripts.verify, scripts.generate_pack"
|
||||
)
|
||||
self.assertEqual(result.returncode, 0, result.stderr[-400:])
|
||||
|
||||
def test_run_as_a_module(self):
|
||||
result = self._run("-m", "scripts.scraper.libretro_scraper", "--help")
|
||||
self.assertEqual(result.returncode, 0, result.stderr[-400:])
|
||||
|
||||
def test_run_as_a_script(self):
|
||||
result = self._run("scripts/list_platforms.py")
|
||||
self.assertEqual(result.returncode, 0, result.stderr[-400:])
|
||||
Reference in new issue
Block a user