annotate pyntnclick/resources.py @ 571:20e296d4a3a5 pyntnclick

Add load_image to Resources.
author Jeremy Thurgood <firxen@gmail.com>
date Sat, 11 Feb 2012 15:48:04 +0200
parents e207dfad0d9e
children 970cdc219e15
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
561
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
1 # -*- test-case-name: pyntnclick.tests.test_resources -*-
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
2
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
3 import os
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
4 from pkg_resources import resource_filename
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
5
571
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
6 import pygame
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
7
561
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
8
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
9 class ResourceNotFound(Exception):
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
10 pass
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
11
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
12
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
13 class Resources(object):
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
14 DEFAULT_RESOURCE_MODULE = "pyntnclick.data"
571
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
15 CONVERT_ALPHA = True
561
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
16
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
17 def __init__(self, resource_module, language=None):
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
18 self.resource_module = resource_module
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
19 self.language = language
571
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
20 self._image_cache = {}
561
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
21
571
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
22 def get_resource_path(self, *resource_path_fragments):
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
23 resource_name = os.path.join(*resource_path_fragments)
561
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
24 for path in self.get_paths(resource_name):
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
25 if os.path.exists(path):
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
26 return path
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
27 raise ResourceNotFound(resource_name)
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
28
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
29 def get_paths(self, resource_path):
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
30 paths = []
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
31 for module in [self.resource_module, self.DEFAULT_RESOURCE_MODULE]:
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
32 if self.language:
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
33 fn = os.path.join(self.language, resource_path)
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
34 paths.append(resource_filename(module, fn))
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
35 paths.append(resource_filename(module, resource_path))
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
36 return paths
571
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
37
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
38 def load_image(self, image_name):
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
39 image_path = self.get_resource_path('images', image_name)
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
40 if image_path not in self._image_cache:
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
41 image = pygame.image.load(image_path)
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
42 if self.CONVERT_ALPHA:
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
43 image = image.convert_alpha(pygame.display.get_surface())
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
44 self._image_cache[image_path] = image
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
45 return self._image_cache[image_path]