~adam-collard/landscape-charm/install-sources-keys

218.2.1 by Free Ekanayaka
Add testable install hook
1
from charmhelpers.core import hookenv
218.2.2 by Free Ekanayaka
Improve testing
2
from charmhelpers.core.hookenv import ERROR
3
297.2.8 by Danilo Šegan
Drop HookError.
4
from lib.error import CharmError
294.2.1 by Danilo Šegan
Introduce MaintenanceHook and make UpgradeAction use it.
5
218.2.2 by Free Ekanayaka
Improve testing
6
218.2.1 by Free Ekanayaka
Add testable install hook
7
class Hook(object):
8
    """Juju hook Abstraction, providing dependency injection for testing."""
9
218.2.2 by Free Ekanayaka
Improve testing
10
    def __init__(self, hookenv=hookenv):
11
        """
12
        @param hookenv: The charm-helpers C{hookenv} module, will be replaced
13
            by tests.
14
        """
15
        self._hookenv = hookenv
218.2.1 by Free Ekanayaka
Add testable install hook
16
218.2.2 by Free Ekanayaka
Improve testing
17
    def __call__(self):
18
        """Invoke the hook.
218.2.1 by Free Ekanayaka
Add testable install hook
19
20
        @return: An integer with the exit code for the hook.
21
        """
218.3.1 by Free Ekanayaka
Add PostgreSQLRelationContext
22
        self._hookenv.log("Invoke handler for %s" % self._hookenv.hook_name())
218.2.2 by Free Ekanayaka
Improve testing
23
        try:
24
            self._run()
297.2.8 by Danilo Šegan
Drop HookError.
25
        except CharmError as error:
218.2.2 by Free Ekanayaka
Improve testing
26
            self._hookenv.log(str(error), ERROR)
27
            return 1
28
        return 0
29
30
    def _run(self):
31
        """Do the job."""
218.2.1 by Free Ekanayaka
Add testable install hook
32
        raise NotImplementedError("Must be implemented by sub-classes")