No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

loader.py 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. # -*- coding: utf-8 -*-
  2. import os
  3. import os.path
  4. import warnings
  5. LODEL2_INSTANCES_DIR = '.'
  6. EXCLUDE_DIR = {'conf.d'}
  7. try:
  8. from lodel.context import LodelContext
  9. except ImportError:
  10. LODEL_BASE_DIR = os.path.dirname(
  11. os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
  12. from lodel.context import LodelContext
  13. LodelContext.init(LodelContext.MULTISITE)
  14. LodelContext.set(None) #Loading context creation
  15. #Multisite instance settings loading
  16. CONFDIR = os.path.join(os.getcwd(), 'conf.d')
  17. if not os.path.isdir(CONFDIR):
  18. warnings.warn('%s do not exists, default settings used' % CONFDIR)
  19. LodelContext.expose_modules(globals(), {
  20. 'lodel.settings.settings': [('Settings', 'settings')],
  21. 'lodel.plugins.multisite.confspecs': 'multisite_confspecs'})
  22. if not settings.started():
  23. settings('./conf.d', multisite_confspecs.LODEL2_CONFSPECS)
  24. lodelsites_list = [ os.path.realpath(os.path.join(LODEL2_INSTANCES_DIR,sitename))
  25. for sitename in os.listdir(LODEL2_INSTANCES_DIR)
  26. if os.path.isdir(sitename) and sitename not in EXCLUDE_DIR]
  27. for lodelsite_path in lodelsites_list:
  28. ctx_name = LodelContext.from_path(lodelsite_path)
  29. #Switch to new context
  30. LodelContext.set(ctx_name)
  31. os.chdir(lodelsite_path)
  32. # Loading settings
  33. LodelContext.expose_modules(globals(), {
  34. 'lodel.settings.settings': [('Settings', 'settings')]})
  35. if not settings.started():
  36. settings('./conf.d')
  37. LodelContext.expose_modules(globals(), {'lodel.settings': ['Settings']})
  38. # Loading hooks & plugins
  39. LodelContext.expose_modules(globals(), {
  40. 'lodel.plugin': ['LodelHook'],
  41. 'lodel.plugin.core_hooks': 'core_hooks',
  42. 'lodel.plugin.core_scripts': 'core_scripts'
  43. })
  44. #Load plugins
  45. LodelContext.expose_modules(globals(), {
  46. 'lodel.logger': 'logger',
  47. 'lodel.plugin': ['Plugin']})
  48. logger.debug("Loader.start() called")
  49. Plugin.load_all()
  50. #Import & expose dyncode
  51. LodelContext.expose_dyncode(globals())
  52. #Next hook triggers dyncode datasource instanciations
  53. LodelHook.call_hook('lodel2_plugins_loaded', '__main__', None)
  54. #Next hook triggers call of interface's main loop
  55. LodelHook.call_hook('lodel2_bootstraped', '__main__', None)
  56. #switch back to loader context
  57. LodelContext.set(None)
  58. LodelContext.expose_modules(
  59. globals(), {'lodel.plugins.multisite.main': 'main'})
  60. main.main_loop()