Turn resources into a module, which can hold mutators too
authorStefano Rivera <stefano@rivera.za.net>
Sun, 11 May 2014 16:38:51 +0000 (18:38 +0200)
committerStefano Rivera <stefano@rivera.za.net>
Sun, 11 May 2014 16:38:59 +0000 (18:38 +0200)
naja/resources.py [deleted file]
naja/resources/__init__.py [new file with mode: 0644]
naja/resources/loader.py [new file with mode: 0644]

diff --git a/naja/resources.py b/naja/resources.py
deleted file mode 100644 (file)
index 00ebe1c..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-import os
-import sys
-
-try:
-    from pkg_resources import resource_filename
-except ImportError:
-    # OK, we're most likely running under py2exe, so this is safe
-    # (for values of safe that are unconcerned about py2exe being involved)
-    def resource_filename(mod, path):
-        # There are better ways of doing this, but I've spent too much
-        # time going down this rabbithole already
-        return os.path.join(os.path.dirname(__file__), '..', 'data', path)
-import pygame
-
-
-class ResourceNotFound(Exception):
-    pass
-
-
-class Resources(object):
-    CONVERT_ALPHA = True
-
-    def __init__(self, resource_module, language=None):
-        self.resource_module = resource_module
-        self.lang_dialect = language
-        self.language = language.split('_', 1)[0] if language else None
-        self._cache = {}
-
-    def create_resource_path(self, *path_fragments):
-        return resource_filename(self.resource_module,
-                                 os.path.join(*path_fragments))
-
-    def get_resource_path(self, *path_fragments):
-        for mod, full_path_fragments in self.lang_locations(path_fragments):
-            path = resource_filename(mod, os.path.join(*full_path_fragments))
-            if os.path.exists(path):
-                return path
-        raise ResourceNotFound(os.path.join(*path_fragments))
-
-    def lang_locations(self, path_fragments):
-        '''
-        For each resource module, yield:
-        * (<module>, (<lang>_<dialect>, <path>))
-        * (<module>, (<lang>, <path>))
-        * (<module>, (<path>, ))
-        '''
-        for module in (self.resource_module,):
-            if self.lang_dialect:
-                yield (module, (self.lang_dialect,) + path_fragments)
-            if self.language != self.lang_dialect:
-                yield (module, (self.language,) + path_fragments)
-            yield (module, path_fragments)
-
-    def get_file(self, *path_fragments, **kw):
-        mode = kw.get('mode', "rU")
-        try:
-            path = self.get_resource_path(*path_fragments)
-        except ResourceNotFound:
-            if 'w' in mode:
-                path = self.create_resource_path(*path_fragments)
-            else:
-                raise
-        return file(path, mode)
-
-    def get_image(self, *name_fragments, **kw):
-        transforms = kw.get('transforms', ())
-        basedir = kw.get('basedir', 'images')
-
-        path = (basedir,) + name_fragments
-
-        if path not in self._cache:
-            fn = self.get_resource_path(*path)
-            image = pygame.image.load(fn)
-            if self.CONVERT_ALPHA:
-                if not pygame.display.get_init():
-                    print >> sys.stderr, ("Display not initialized, "
-                                          "image '%s' not loaded."
-                                          % os.path.join(*path))
-                    return
-                image = image.convert_alpha(pygame.display.get_surface())
-            self._cache[path] = image
-
-        key = (path, transforms)
-        if key not in self._cache:
-            image = self._cache[path]
-            for mutator in transforms:
-                image = mutator(image)
-            self._cache[key] = image
-
-        return self._cache[key]
-
-    def get_font(self, file_name, font_size):
-        basedir = 'fonts'
-        key = (basedir, file_name, font_size)
-
-        if key not in self._cache:
-            fn = self.get_resource_path(basedir, file_name)
-            self._cache[key] = pygame.font.Font(fn, font_size)
-
-        return self._cache[key]
-
-
-resources = Resources('data')
diff --git a/naja/resources/__init__.py b/naja/resources/__init__.py
new file mode 100644 (file)
index 0000000..191cbd4
--- /dev/null
@@ -0,0 +1,3 @@
+from naja.resources.loader import Loader
+
+resources = Loader('data')
diff --git a/naja/resources/loader.py b/naja/resources/loader.py
new file mode 100644 (file)
index 0000000..28a3c7a
--- /dev/null
@@ -0,0 +1,101 @@
+import os
+import sys
+
+try:
+    from pkg_resources import resource_filename
+except ImportError:
+    # OK, we're most likely running under py2exe, so this is safe
+    # (for values of safe that are unconcerned about py2exe being involved)
+    def resource_filename(mod, path):
+        # There are better ways of doing this, but I've spent too much
+        # time going down this rabbithole already
+        return os.path.join(os.path.dirname(__file__), '..', '..', 'data',
+                            path)
+import pygame
+
+
+class ResourceNotFound(Exception):
+    pass
+
+
+class Loader(object):
+    CONVERT_ALPHA = True
+
+    def __init__(self, resource_module, language=None):
+        self.resource_module = resource_module
+        self.lang_dialect = language
+        self.language = language.split('_', 1)[0] if language else None
+        self._cache = {}
+
+    def create_resource_path(self, *path_fragments):
+        return resource_filename(self.resource_module,
+                                 os.path.join(*path_fragments))
+
+    def get_resource_path(self, *path_fragments):
+        for mod, full_path_fragments in self.lang_locations(path_fragments):
+            path = resource_filename(mod, os.path.join(*full_path_fragments))
+            if os.path.exists(path):
+                return path
+        raise ResourceNotFound(os.path.join(*path_fragments))
+
+    def lang_locations(self, path_fragments):
+        '''
+        For each resource module, yield:
+        * (<module>, (<lang>_<dialect>, <path>))
+        * (<module>, (<lang>, <path>))
+        * (<module>, (<path>, ))
+        '''
+        for module in (self.resource_module,):
+            if self.lang_dialect:
+                yield (module, (self.lang_dialect,) + path_fragments)
+            if self.language != self.lang_dialect:
+                yield (module, (self.language,) + path_fragments)
+            yield (module, path_fragments)
+
+    def get_file(self, *path_fragments, **kw):
+        mode = kw.get('mode', "rU")
+        try:
+            path = self.get_resource_path(*path_fragments)
+        except ResourceNotFound:
+            if 'w' in mode:
+                path = self.create_resource_path(*path_fragments)
+            else:
+                raise
+        return file(path, mode)
+
+    def get_image(self, *name_fragments, **kw):
+        transforms = kw.get('transforms', ())
+        basedir = kw.get('basedir', 'images')
+
+        path = (basedir,) + name_fragments
+
+        if path not in self._cache:
+            fn = self.get_resource_path(*path)
+            image = pygame.image.load(fn)
+            if self.CONVERT_ALPHA:
+                if not pygame.display.get_init():
+                    print >> sys.stderr, ("Display not initialized, "
+                                          "image '%s' not loaded."
+                                          % os.path.join(*path))
+                    return
+                image = image.convert_alpha(pygame.display.get_surface())
+            self._cache[path] = image
+
+        key = (path, transforms)
+        if key not in self._cache:
+            image = self._cache[path]
+            for mutator in transforms:
+                image = mutator(image)
+            self._cache[key] = image
+
+        return self._cache[key]
+
+    def get_font(self, file_name, font_size):
+        basedir = 'fonts'
+        key = (basedir, file_name, font_size)
+
+        if key not in self._cache:
+            fn = self.get_resource_path(basedir, file_name)
+            self._cache[key] = pygame.font.Font(fn, font_size)
+
+        return self._cache[key]