coriolis/unicorn/python/unicornInit.py

94 lines
3.4 KiB
Python

#!/usr/bin/env python
#
# This file is part of the Coriolis Software.
# Copyright (c) UPMC 2014-2015, All Rights Reserved
#
# +-----------------------------------------------------------------+
# | C O R I O L I S |
# | U n i c o r n - M a i n G U I |
# | |
# | Author : Jean-Paul CHAPUT |
# | E-mail : Jean-Paul.Chaput@asim.lip6.fr |
# | =============================================================== |
# | Python : "./init/unicornInit.py" |
# +-----------------------------------------------------------------+
try:
import traceback
import sys
import os.path
from helpers import ErrorMessage
from helpers import WarningMessage
import Viewer
except ImportError, e:
serror = str(e)
if serror.startswith('No module named'):
module = serror.split()[-1]
print '[ERROR] The <%s> python module or symbol cannot be loaded.' % module
print ' Please check the integrity of the <coriolis> package.'
if str(e).find('cannot open shared object file'):
library = serror.split(':')[0]
print '[ERROR] The <%s> shared library cannot be loaded.' % library
print ' Under RHEL 6, you must be under devtoolset-2.'
print ' (scl enable devtoolset-2 bash)'
sys.exit(1)
except Exception, e:
print '[ERROR] A strange exception occurred while loading the basic Coriolis/Python'
print ' modules. Something may be wrong at Python/C API level.\n'
print ' %s' % e
sys.exit(2)
def unicornConfigure ( **kw ):
editor = None
if kw.has_key('editor'):
editor = kw['editor']
else:
print ErrorMessage( 3, 'unicornConfigure.py: Must be run from a CellView derived class.' )
return
cumulusDir = None
for path in sys.path:
if path.endswith('/cumulus'):
cumulusDir = path
if not cumulusDir:
print ErrorMessage( 3, 'unicornConfigure.py: Cannot find <cumulus> in PYTHONPATH.' )
return
pluginsDir = os.path.join( cumulusDir, 'plugins' )
if not os.path.isdir(pluginsDir):
print ErrorMessage( 3, 'unicornConfigure.py: Cannot find <cumulus/plugins> directory:' \
, '<%s>' % pluginsDir )
return
sys.path.append( pluginsDir )
if editor.hasMenu( 'plugins' ):
print WarningMessage( 'The <plugins> menu has already been created.' )
return
editor.addMenu( 'plugins', 'Plu&gins', Viewer.CellViewer.TopMenu )
for pluginFile in os.listdir( pluginsDir ):
if pluginFile == "__init__.py": continue
if not pluginFile.endswith('.py'): continue
moduleName = os.path.basename(pluginFile)[:-3]
try:
module = __import__( moduleName, globals(), locals(), moduleName )
if not module.__dict__.has_key('unicornHook'):
print WarningMessage( 'Plugin <%s> do not provides the unicornHook() method, skipped.' \
% moduleName )
continue
module.__dict__['unicornHook']( **kw )
except ErrorMessage, e:
print e
except Exception, e:
print ErrorMessage( 3, 'Plugin <%s> cannot be loaded, see message below:' % moduleName )
print e
traceback.print_tb(sys.exc_info()[2])
return