src/pyams_media/include.py
changeset 0 fd39db613f8b
child 32 27d0b4049921
--- /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 <tflorac AT ulthar.net>
+# 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)