Cache found scanners to avoid further searches

This commit is contained in:
Roberto Rosario
2012-08-08 05:39:46 -04:00
parent 388a4b0dd7
commit be55d23c34

View File

@@ -382,6 +382,8 @@ class IMAPEmail(EmailBaseModel):
class LocalScanner(InteractiveBaseModel):
_scanner_cache = {}
is_interactive = True
source_type = SOURCE_CHOICE_LOCAL_SCANNER
default_icon = SOURCE_ICON_IMAGES
@@ -390,14 +392,35 @@ class LocalScanner(InteractiveBaseModel):
scanner_description = models.CharField(max_length=255, verbose_name=_(u'scanner description'))
@classmethod
def get_scanner_choices(cls):
def get_scanners(cls):
imagescanner.settings.ENABLE_NET_BACKEND = False
imagescanner.settings.ENABLE_TEST_BACKEND = False
iscanner = imagescanner.ImageScanner(remote_search=False)
scanners = iscanner.list_scanners()
for scanner in scanners:
LocalScanner._scanner_cache[scanner._device] = scanner
return scanners
@classmethod
def get_scanner_choices(cls):
scanners = cls.get_scanners()
return [(scanner._device, u'%s: %s - %s - %s <%s>' % (scanner.id, scanner.manufacturer, scanner.name, scanner.description, scanner._device)) for scanner in scanners]
def get_scanner(self, fail=False):
try:
return LocalScanner._scanner_cache[self.device]
except IndexError:
if fail==False:
LocalScanner.get_scanners()
return self.get_scanner(fail=True)
else:
# TODO: raise specialized exception
raise Exception('Error getting scanner')
class Meta(InteractiveBaseModel.Meta):
verbose_name = _(u'local scanner')
verbose_name_plural = _(u'local scanners')