__init__.py 2.17 KB
Newer Older
mashun1's avatar
veros  
mashun1 committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
"""Veros, the versatile ocean simulator"""

import sys
import types

# black magic: ensure lazy imports for public API by overriding module.__class__


def _reraise_exceptions(func):
    import functools

    @functools.wraps(func)
    def reraise_wrapper(*args, **kwargs):
        try:
            return func(*args, **kwargs)
        except Exception as e:
            raise ImportError("Critical error during initial import") from e

    return reraise_wrapper


class _PublicAPI(types.ModuleType):
    @property
    @_reraise_exceptions
    def __version__(self):
        from veros._version import get_versions

        return get_versions()["version"]

    @property
    @_reraise_exceptions
    def logger(self):
        if not hasattr(self, "_logger"):
            from veros.logs import setup_logging

            self._logger = setup_logging()
        return self._logger

    @property
    @_reraise_exceptions
    def runtime_settings(self):
        if not hasattr(self, "_runtime_settings"):
            from veros.runtime import RuntimeSettings

            self._runtime_settings = RuntimeSettings()
        return self._runtime_settings

    @property
    @_reraise_exceptions
    def runtime_state(self):
        if not hasattr(self, "_runtime_state"):
            from veros.runtime import RuntimeState

            self._runtime_state = RuntimeState()
        return self._runtime_state

    @property
    @_reraise_exceptions
    def veros_routine(self):
        from veros.routines import veros_routine

        return veros_routine

    @property
    @_reraise_exceptions
    def veros_kernel(self):
        from veros.routines import veros_kernel

        return veros_kernel

    @property
    @_reraise_exceptions
    def KernelOutput(self):
        from veros.state import KernelOutput

        return KernelOutput

    @property
    @_reraise_exceptions
    def VerosSetup(self):
        from veros.veros import VerosSetup

        return VerosSetup

    @property
    @_reraise_exceptions
    def VerosState(self):
        from veros.state import VerosState

        return VerosState


sys.modules[__name__].__class__ = _PublicAPI

del sys
del types
del _PublicAPI
del _reraise_exceptions