From bd22232c72b3185b622daf520f91cc93b86e6580 Mon Sep 17 00:00:00 2001 From: Jamie Bliss <jamie@ivyleav.es> Date: Tue, 14 May 2019 10:19:48 -0400 Subject: [PATCH 1/4] Sprites: Special case __main__ and use CWD in that case --- ppb/sprites.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ppb/sprites.py b/ppb/sprites.py index 03e648c7..7d3ef295 100644 --- a/ppb/sprites.py +++ b/ppb/sprites.py @@ -1,8 +1,5 @@ from inspect import getfile -from numbers import Number -from os.path import realpath from pathlib import Path -from typing import Dict, Iterable, Sequence from typing import Union from ppb import Vector @@ -296,5 +293,8 @@ def __image__(self): def __resource_path__(self): if self.resource_path is None: - self.resource_path = Path(realpath(getfile(type(self)))).absolute().parent + if type(self).__module__ == '__main__': + self.resource_path = Path.cwd().resolve() + else: + self.resource_path = Path(getfile(type(self))).resolve().parent return self.resource_path From 9deef050cc24e77114428e3fe2c2a471dd24c25e Mon Sep 17 00:00:00 2001 From: Jamie Bliss <jamie@ivyleav.es> Date: Tue, 14 May 2019 10:24:31 -0400 Subject: [PATCH 2/4] Add tests --- tests/test_sprites.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/test_sprites.py b/tests/test_sprites.py index 1a264f1f..3ee933dc 100644 --- a/tests/test_sprites.py +++ b/tests/test_sprites.py @@ -325,3 +325,14 @@ def test_rotatable_base_sprite(): test_sprite.rotate(1) assert test_sprite.rotation == 1 + + +def test_sprite_in_main(): + class TestSprite(BaseSprite): + pass + + TestSprite.__module__ = '__main__' + + s = TestSprite() + + assert s.__resource_path__() # We don't care what it is, as long as it's something From c9be483d6c6dd23f50abf0d2265f748f5420a8ee Mon Sep 17 00:00:00 2001 From: Piper Thunstrom <pathunstrom@gmail.com> Date: Tue, 14 May 2019 18:40:01 -0400 Subject: [PATCH 3/4] Uses patch to simulate the failure state. --- ppb/sprites.py | 10 ++++++---- tests/test_sprites.py | 11 ++++++++--- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/ppb/sprites.py b/ppb/sprites.py index 7d3ef295..cdb0efe2 100644 --- a/ppb/sprites.py +++ b/ppb/sprites.py @@ -1,4 +1,5 @@ from inspect import getfile +from os.path import realpath from pathlib import Path from typing import Union @@ -293,8 +294,9 @@ def __image__(self): def __resource_path__(self): if self.resource_path is None: - if type(self).__module__ == '__main__': - self.resource_path = Path.cwd().resolve() - else: - self.resource_path = Path(getfile(type(self))).resolve().parent + try: + file_path = Path(getfile(type(self))).resolve().parent + except TypeError: + file_path = Path.cwd().resolve() + self.resource_path = file_path return self.resource_path diff --git a/tests/test_sprites.py b/tests/test_sprites.py index 3ee933dc..da84761f 100644 --- a/tests/test_sprites.py +++ b/tests/test_sprites.py @@ -1,4 +1,5 @@ from unittest import TestCase +from unittest.mock import patch from ppb import BaseSprite, Vector from ppb.sprites import Rotatable @@ -328,11 +329,15 @@ def test_rotatable_base_sprite(): def test_sprite_in_main(): + """ + Test that Sprite.__resource_path__ returns a meaningful value inside + REPLs where __main__ doesn't have a file. + """ class TestSprite(BaseSprite): pass - TestSprite.__module__ = '__main__' - s = TestSprite() - assert s.__resource_path__() # We don't care what it is, as long as it's something + with patch("ppb.sprites.getfile", side_effect=TypeError): + # This patch simulates what happens when TestSprite was defined in the REPL + assert s.__resource_path__() # We don't care what it is, as long as it's something From 2a642c7d4e43bc18fbdb7c39e3a1060f1ed73324 Mon Sep 17 00:00:00 2001 From: Piper Thunstrom <pathunstrom@gmail.com> Date: Tue, 14 May 2019 18:42:43 -0400 Subject: [PATCH 4/4] Removes unneeded realpath import. --- ppb/sprites.py | 1 - 1 file changed, 1 deletion(-) diff --git a/ppb/sprites.py b/ppb/sprites.py index cdb0efe2..f9b0cf8e 100644 --- a/ppb/sprites.py +++ b/ppb/sprites.py @@ -1,5 +1,4 @@ from inspect import getfile -from os.path import realpath from pathlib import Path from typing import Union