2 # -*- coding: utf-8 -*-
6 # standart library import
10 from importlib import __import__
11 from os.path import isfile, basename
14 # third parties components
19 from sima.plugins.crop import Crop
20 from sima.plugins.addhist import History
21 from sima.lib.logger import set_logger
22 from sima.lib.simadb import SimaDB
23 from sima.utils.config import ConfMan
24 from sima.utils.startopt import StartOpt
25 from sima.utils.utils import exception_log
28 # official plugins to start
29 PLUGINS = (Crop, History)
32 def load_contrib_plugins(sima):
33 """Handles contrib/external plugins
35 if not sima.config.has_option('sima', 'plugins'):
37 logger = logging.getLogger('sima')
38 for plugin in sima.config.get('sima','plugins').split(','):
39 plugin = plugin.strip(' \n')
40 module = 'sima.plugins.contrib.{}'.format(plugin.lower())
42 mod_obj = __import__(module, fromlist=[plugin])
43 except ImportError as err:
44 logger.error('Failed to load plugin\'s module: {0} ({1})'.format(module, err))
47 plugin_obj = getattr(mod_obj, plugin)
48 except AttributeError as err:
49 logger.error('Failed to load plugin {0} ({1})'.format(plugin, err))
51 logger.info('Loading contrib plugin: {name} ({doc})'.format(**plugin_obj.info()))
52 sima.register_plugin(plugin_obj)
56 """Entry point, deal w/ CLI and starts application
58 info = dict({'version': core.__version__,})
59 # StartOpt gathers options from command line call (in StartOpt().options)
62 verbosity = sopt.options.get('verbosity', 'warning')
63 cli_loglevel = getattr(logging, verbosity.upper())
64 set_logger(level=verbosity)
65 logger = logging.getLogger('sima')
66 logger.setLevel(cli_loglevel)
68 conf_manager = ConfMan(logger, sopt.options)
69 config = conf_manager.config
70 logger.setLevel(getattr(logging,
71 config.get('log', 'verbosity').upper())) # pylint: disable=E1103
73 logger.debug('Command line say: {0}'.format(sopt.options))
76 if (sopt.options.get('create_db', None)
77 or not isfile(conf_manager.db_file)):
78 logger.info('Creating database in "{}"'.format(conf_manager.db_file))
79 open(conf_manager.db_file, 'a').close()
80 SimaDB(db_path=conf_manager.db_file).create_db()
81 if sopt.options.get('create_db', None):
82 logger.info('Done, bye...')
85 logger.info('Starting...')
86 sima = core.Sima(config, conf_manager.db_file)
88 # Loading internal plugins
89 for plugin in PLUGINS:
90 logger.info('Loading internal plugin: {name} ({doc})'.format(**plugin.info()))
91 sima.register_plugin(plugin)
93 # Loading contrib plugins
94 load_contrib_plugins(sima)
97 except KeyboardInterrupt:
98 logger.info('Caught KeyboardInterrupt, stopping')
103 if __name__ == '__main__':
104 # pylint: disable=broad-except
112 # vim: ai ts=4 sw=4 sts=4 expandtab