Skip to content

Commit 0b4290b

Browse files
authored
Merge pull request #43 from Contraz/extend-tests
Extend tests
2 parents f928478 + 326b189 commit 0b4290b

File tree

21 files changed

+219
-108
lines changed

21 files changed

+219
-108
lines changed

demosys/context/base.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ def __init__(self):
4545
# ModernGL context
4646
self.ctx = None
4747

48+
@property
49+
def size(self):
50+
return (self.width, self.height)
51+
4852
def draw(self, current_time, frame_time):
4953
self.set_default_viewport()
5054
self.manager.draw(current_time, frame_time, self.fbo)

demosys/core/datafiles/finders.py

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
1-
import functools
2-
31
from demosys.core import finders
42
from demosys.conf import settings
5-
from demosys.core.exceptions import ImproperlyConfigured
6-
from demosys.utils.module_loading import import_string
73

84

95
class FileSystemFinder(finders.BaseFileSystemFinder):
@@ -18,20 +14,4 @@ class EffectDirectoriesFinder(finders.BaseEffectDirectoriesFinder):
1814

1915
def get_finders():
2016
for finder in settings.DATA_FINDERS:
21-
yield get_finder(finder)
22-
23-
24-
@functools.lru_cache(maxsize=None)
25-
def get_finder(import_path):
26-
"""
27-
Get a finder class from an import path.
28-
Raises ``demosys.core.exceptions.ImproperlyConfigured`` if the finder is not found.
29-
This function uses an lru cache.
30-
31-
:param import_path: string representing an import path
32-
:return: An instance of the finder
33-
"""
34-
Finder = import_string(import_path)
35-
if not issubclass(Finder, finders.BaseFileSystemFinder):
36-
raise ImproperlyConfigured('Finder {} is not a subclass of core.finders.FileSystemFinder'.format(import_path))
37-
return Finder()
17+
yield finders.get_finder(finder)

demosys/core/finders.py

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
"""
22
Base finders
33
"""
4+
import functools
45
from collections import namedtuple
56
from pathlib import Path
67

78
from demosys.conf import settings
89
from demosys.core.exceptions import ImproperlyConfigured
10+
from demosys.utils.module_loading import import_string
911

1012
FinderEntry = namedtuple('FinderEntry', ['path', 'abspath', 'exists'])
1113

@@ -17,11 +19,10 @@ class BaseFileSystemFinder:
1719
def __init__(self):
1820
if not hasattr(settings, self.settings_attr):
1921
raise ImproperlyConfigured(
20-
"Settings module don't define TEXTURE_DIRS."
21-
"This is required when using a FileSystemFinder."
22+
"Settings module don't define {}."
23+
"This is required when using a FileSystemFinder.".format(self.settings_attr)
2224
)
2325
self.paths = getattr(settings, self.settings_attr)
24-
self._cached_paths = {}
2526

2627
def find(self, path: Path):
2728
"""
@@ -31,6 +32,11 @@ def find(self, path: Path):
3132
:param path: The path to find
3233
:return: The absolute path to the file or None if not found
3334
"""
35+
# Update paths from settings to make them editable runtime
36+
# This is only possible for FileSystemFinders
37+
if getattr(self, 'settings_attr', None):
38+
self.paths = getattr(settings, self.settings_attr)
39+
3440
path_found = None
3541

3642
for entry in self.paths:
@@ -46,9 +52,29 @@ class BaseEffectDirectoriesFinder(BaseFileSystemFinder):
4652
directory = None
4753

4854
def __init__(self):
49-
from demosys.effects.registry import effects
50-
self.paths = list(effects.get_dirs())
55+
pass
5156

5257
def find(self, path: Path):
5358
path = Path(self.directory) / Path(path)
5459
return super().find(path)
60+
61+
@property
62+
def paths(self):
63+
from demosys.effects.registry import effects
64+
return list(effects.get_dirs())
65+
66+
67+
@functools.lru_cache(maxsize=None)
68+
def get_finder(import_path):
69+
"""
70+
Get a finder class from an import path.
71+
Raises ``demosys.core.exceptions.ImproperlyConfigured`` if the finder is not found.
72+
This function uses an lru cache.
73+
74+
:param import_path: string representing an import path
75+
:return: An instance of the finder
76+
"""
77+
Finder = import_string(import_path)
78+
if not issubclass(Finder, BaseFileSystemFinder):
79+
raise ImproperlyConfigured('Finder {} is not a subclass of core.finders.FileSystemFinder'.format(import_path))
80+
return Finder()

demosys/core/scenefiles/finders.py

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
1-
import functools
2-
31
from demosys.core import finders
42
from demosys.conf import settings
5-
from demosys.core.exceptions import ImproperlyConfigured
6-
from demosys.utils.module_loading import import_string
73

84

95
class FileSystemFinder(finders.BaseFileSystemFinder):
@@ -18,20 +14,4 @@ class EffectDirectoriesFinder(finders.BaseEffectDirectoriesFinder):
1814

1915
def get_finders():
2016
for finder in settings.SCENE_FINDERS:
21-
yield get_finder(finder)
22-
23-
24-
@functools.lru_cache(maxsize=None)
25-
def get_finder(import_path):
26-
"""
27-
Get a finder class from an import path.
28-
Raises ``demosys.core.exceptions.ImproperlyConfigured`` if the finder is not found.
29-
This function uses an lru cache.
30-
31-
:param import_path: string representing an import path
32-
:return: An instance of the finder
33-
"""
34-
Finder = import_string(import_path)
35-
if not issubclass(Finder, finders.BaseFileSystemFinder):
36-
raise ImproperlyConfigured('Finder {} is not a subclass of core.finders.FileSystemFinder'.format(import_path))
37-
return Finder()
17+
yield finders.get_finder(finder)

demosys/core/shaderfiles/finders.py

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
1-
import functools
2-
31
from demosys.core import finders
42
from demosys.conf import settings
5-
from demosys.core.exceptions import ImproperlyConfigured
6-
from demosys.utils.module_loading import import_string
73

84

95
class FileSystemFinder(finders.BaseFileSystemFinder):
@@ -18,20 +14,4 @@ class EffectDirectoriesFinder(finders.BaseEffectDirectoriesFinder):
1814

1915
def get_finders():
2016
for finder in settings.SHADER_FINDERS:
21-
yield get_finder(finder)
22-
23-
24-
@functools.lru_cache(maxsize=None)
25-
def get_finder(import_path):
26-
"""
27-
Get a finder class from an import path.
28-
Raises ``demosys.core.exceptions.ImproperlyConfigured`` if the finder is not found.
29-
This function uses an lru cache.
30-
31-
:param import_path: string representing an import path
32-
:return: An instance of the finder
33-
"""
34-
Finder = import_string(import_path)
35-
if not issubclass(Finder, finders.BaseFileSystemFinder):
36-
raise ImproperlyConfigured('Finder {} is not a subclass of core.finders.FileSystemFinder'.format(import_path))
37-
return Finder()
17+
yield finders.get_finder(finder)

demosys/core/texturefiles/finders.py

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
1-
import functools
2-
31
from demosys.core import finders
42
from demosys.conf import settings
5-
from demosys.core.exceptions import ImproperlyConfigured
6-
from demosys.utils.module_loading import import_string
73

84

95
class FileSystemFinder(finders.BaseFileSystemFinder):
@@ -18,20 +14,4 @@ class EffectDirectoriesFinder(finders.BaseEffectDirectoriesFinder):
1814

1915
def get_finders():
2016
for finder in settings.TEXTURE_FINDERS:
21-
yield get_finder(finder)
22-
23-
24-
@functools.lru_cache(maxsize=None)
25-
def get_finder(import_path):
26-
"""
27-
Get a finder class from an import path.
28-
Raises ``demosys.core.exceptions.ImproperlyConfigured`` if the finder is not found.
29-
This function uses an lru cache.
30-
31-
:param import_path: string representing an import path
32-
:return: An instance of the finder
33-
"""
34-
Finder = import_string(import_path)
35-
if not issubclass(Finder, finders.BaseFileSystemFinder):
36-
raise ImproperlyConfigured('Finder {} is not a subclass of core.finders.FileSystemFinder'.format(import_path))
37-
return Finder()
17+
yield finders.get_finder(finder)

demosys/deferred/__init__.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,9 @@
1-
from .renderer import DeferredRenderer # noqa
1+
import os
2+
3+
from demosys.conf import settings
4+
5+
settings.add_shader_dir(
6+
os.path.join(os.path.dirname(os.path.abspath(__file__)), 'shaders')
7+
)
8+
9+
from .renderer import DeferredRenderer # noqa

demosys/deferred/effect.py

Lines changed: 0 additions & 8 deletions
This file was deleted.

demosys/effect_templates/raymarching_simple/effect.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ def __init__(self):
1414
# create plane to fit whole screen
1515
self.plane = geometry.plane.plane_xz(size=(self.window_width, self.window_height), resolution=(10, 10))
1616

17-
@effect.bind_target
1817
def draw(self, time, frametime, target):
1918
self.ctx.enable(moderngl.DEPTH_TEST)
2019

demosys/resources/base.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def load_pool(self):
3030
Loads all the data files using the configured finders.
3131
"""
3232
for path, data_file in self.file_map.items():
33-
if self.file_map[path] is None:
33+
if data_file is None:
3434
self._load(self.file_meta[path])
3535

3636
def delete(self, obj, destroy=False):
@@ -42,6 +42,7 @@ def delete(self, obj, destroy=False):
4242
if data == obj:
4343
del self.file_map[path]
4444
del self.file_meta[path]
45+
4546
if destroy:
4647
self._destroy(obj)
4748
break
@@ -53,7 +54,11 @@ def _destroy(self, obj):
5354
def flush(self, destroy=False):
5455
"""Delete all resources"""
5556
for obj in list(self.file_map.values()):
56-
self.delete(obj, destroy=destroy)
57+
if obj is not None:
58+
self.delete(obj, destroy=destroy)
59+
60+
self.file_map = {}
61+
self.file_meta = {}
5762

5863
def _find_last_of(self, file_path, finders):
5964
"""Find the last occurance of the file in finders"""

0 commit comments

Comments
 (0)