X-Git-Url: https://scm.cri.ensmp.fr/git/Portfolio.git/blobdiff_plain/2da869b2b46179d64c05eaac4081226fdbbbc9ff..e73353500c67453ef9663d67eaeee7dd46c358ee:/ImageManipulationTool.py?ds=sidebyside diff --git a/ImageManipulationTool.py b/ImageManipulationTool.py deleted file mode 100755 index 77e3a9a..0000000 --- a/ImageManipulationTool.py +++ /dev/null @@ -1,129 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################ -# Copyright © 2005-2008 Benoît PIN # -# Plinn - http://plinn.org # -# # -# This program is free software; you can redistribute it # -# and/or modify it under the terms of the Creative Commons # -# "Attribution-Noncommercial 2.0 Generic" # -# http://creativecommons.org/licenses/by-nc/2.0/ # -############################################################ -""" Image manipulation tool -""" - -from AccessControl import ClassSecurityInfo -from AccessControl.requestmethod import postonly -from Products.PageTemplates.PageTemplateFile import PageTemplateFile -from Products.CMFCore.permissions import ManagePortal -from AccessControl import getSecurityManager -from Globals import InitializeClass -from OFS.OrderedFolder import OrderedFolder -from Products.CMFCore.utils import UniqueObject -from Products.CMFCore.utils import getToolByName -from utils import Message as _ -from manipulation import ImageQueueProcessorThread -from Products.MailHost.decorator import synchronized -import time -from logging import getLogger -from threading import Lock -import weakref -console = getLogger('[portal_image_manipulation]') -queue_threads = weakref.WeakValueDictionary() - - -class ImageManipulationTool( UniqueObject, OrderedFolder) : - """ Contains image manipulation plugins - """ - - id = 'portal_image_manipulation' - meta_type = 'Image Manipulation Tool' - manage_options = ({'label' : _('Processor'), 'action' : 'manage_processor'}, ) + \ - OrderedFolder.manage_options - - security = ClassSecurityInfo() - lock = Lock() - - security.declareProtected( ManagePortal, 'manage_processor' ) - manage_processor = PageTemplateFile('www/manageProcessor', globals(), - __name__='manage_processor') - - security.declareProtected(ManagePortal, 'manage_startProcess') - @postonly - def manage_startProcess(self, REQUEST) : - ' start processor thread ' - self._startQueueProcessorThread() - return self.manage_processor(self, REQUEST, - manage_tabs_message=_('Process started.')) - - security.declareProtected(ManagePortal, 'manage_stopProcess') - @postonly - def manage_stopProcess(self, REQUEST) : - ' stop processor thread ' - self._stopQueueProcessorThread() - return self.manage_processor(self, REQUEST, - manage_tabs_message=_('Process stopped.')) - - security.declareProtected(ManagePortal, 'isRunning') - def isRunning(self): - """ returns boolean telling if the processor thread is running. - """ - path = self.absolute_url(1) - if queue_threads.has_key(path): - thread = queue_threads[path] - return thread.isAlive() - else : - return False - - security.declareProtected(ManagePortal, 'getQueueSize') - def getQueueSize(self): - """returns queue size - """ - if self.isRunning() : - path = self.absolute_url(1) - if queue_threads.has_key(path): - thread = queue_threads[path] - return thread.queueSize - - return 0 - - def _queueAdd(self, itemPath) : - if not self.isRunning() : - self._startQueueProcessorThread(itemPath) - else : - path = self.absolute_url(1) - thread = queue_threads[path] - thread.queueAdd(itemPath) - - @synchronized(lock) - def _startQueueProcessorThread(self, itemPath=None): - """ Start thread for processing image manipulation """ - - if not self.isRunning() : - utool = getToolByName(self, 'portal_url') - ctool = getToolByName(self, 'portal_catalog') - portal = utool.getPortalObject() - brains = ctool.unrestrictedSearchResults(portal_type='Photo', tiles_available=0) - paths = [b.getPath() for b in brains] - if itemPath is not None and itemPath not in paths : - paths.insert(0, itemPath) - thread = ImageQueueProcessorThread(portal.getPhysicalPath(), paths) - thread.start() - path = self.absolute_url(1) - queue_threads[path] = thread - console.info('Thread for %s started' % path) - - @synchronized(lock) - def _stopQueueProcessorThread(self): - """ Stop thread for processing image manipulation """ - - path = self.absolute_url(1) - if queue_threads.has_key(path): - thread = queue_threads[path] - thread.stop() - while thread.isAlive(): - # wait until thread is really dead - time.sleep(0.3) - del queue_threads[path] - console.info('Thread for %s stopped' % path) - -InitializeClass( ImageManipulationTool ) \ No newline at end of file