diff -r 000000000000 -r fd39db613f8b src/pyams_media/include.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/pyams_media/include.py Wed Sep 02 15:31:55 2015 +0200 @@ -0,0 +1,78 @@ +# +# Copyright (c) 2008-2015 Thierry Florac +# All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE. +# + +__docformat__ = 'restructuredtext' + + +# import standard library +import atexit +import logging +logger = logging.getLogger('PyAMS (media)') + +import sys + +# import interfaces +from pyams_media.interfaces import CONVERTER_HANDLER_KEY, CONVERTER_NAME +from pyams_utils.interfaces import PYAMS_APPLICATION_SETTINGS_KEY, PYAMS_APPLICATION_DEFAULT_NAME + +# import packages +from pyams_media.process import MediaConversionProcess, MediaConversionMessageHandler +from pyams_utils.registry import set_local_registry +from pyams_utils.zodb import get_connection_from_settings +from pyams_zmq.process import process_exit_func + + +def include_package(config): + """Pyramid include""" + + # add translations + config.add_translation_dirs('pyams_media:locales') + + # load registry components + try: + import pyams_zmi + except ImportError: + config.scan(ignore='pyams_media.zmi') + else: + config.scan() + + # check for upgrade mode + if sys.argv[0].endswith('pyams_upgrade'): + return + + settings = config.registry.settings + start_handler = settings.get(CONVERTER_HANDLER_KEY, False) + if start_handler: + # get database connection + connection = get_connection_from_settings(settings) + root = connection.root() + # get application + application_name = settings.get(PYAMS_APPLICATION_SETTINGS_KEY, PYAMS_APPLICATION_DEFAULT_NAME) + application = root.get(application_name) + process = None + if application is not None: + sm = application.getSiteManager() + set_local_registry(sm) + try: + conversion_util = sm.get(CONVERTER_NAME) + if conversion_util is not None: + # create medias converter process + process = MediaConversionProcess(start_handler, MediaConversionMessageHandler, config.registry) + logger.debug('Starting medias conversion process {0!r}...'.format(process)) + process.start() + if process.is_alive(): + atexit.register(process_exit_func, process=process) + finally: + if process and not process.is_alive(): + process.terminate() + process.join() + set_local_registry(None)