# synarere -- a trivial Python IRC bot.
# Copyright (C) 2010 Michael Rodriguez.
# Rights to this code are documented in docs/LICENSE.

"""Module API."""

# Import required Python module.
import imp

# Import required source modules.
import instance, vars

def load(module):
    """Load a module."""

    try:
        mod = imp.load_source(module, module)
    except ImportError, e:
        instance.logger.log('Error loading module %s: %s.' % (module, e))
        return

    if not hasattr(mod, 'module_init'):
        instance.logger.log('Warning: Entry point for module %s not found.' % mod.__name__)
        return

    mod.module_init()

    vars.modules_loaded.append(mod)

def unload(mptr):
    """Unload a module."""

    if not hasattr(mptr, 'module_fini'):
        instance.logger.log('Warning: Exit point for module %s not found.' % mptr.__name__)
        return

    mptr.module_fini()

    try:
        vars.modules_loaded.remove(mptr)
    except ValueError:
        instance.logger.log('Warning: Loaded module %s is not in the loaded modules list.' % mptr.__name__)
        return

def load_all_from_conf():
    """Load all modules listed in configuration."""

    if instance.conf.get('mload'):
        for i in instance.conf.get('mload'):
            load(i.get('name'))
    else:
         pass

def unload_all():
    """Unload ALL modules."""

    for i in vars.modules_loaded:
        unload(i)
