Skip to content

main_controllers

MainController

Bases: Parameterized

Base class for application main controller Subclass to extend

Parameters

control_panels : :obj:list List of strings referring to which ControlPanels to use for this MainController instance Should refer to subclasses of :class:~pyhdx.panel.base.ControlPanel client : dask client

Attributes

:class:~bokeh.document.Document

Currently active Bokeh document

logger : :class:~logging.Logger Logger instance control_panels : :obj:dict Dictionary with :class:~pyhdx.panel.base.ControlPanel instances (name as keys) figure_panels : :obj:dict Dictionary with :class:~pyhdx.panel.base.FigurePanel instances (name as keys)

Source code in pyhdx/web/main_controllers.py
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
class MainController(param.Parameterized):
    """
    Base class for application main controller
    Subclass to extend

    Parameters
    ----------
    control_panels : :obj:`list`
        List of strings referring to which ControlPanels to use for this MainController instance
        Should refer to subclasses of :class:`~pyhdx.panel.base.ControlPanel`
    client : dask client


    Attributes
    ----------

    doc : :class:`~bokeh.document.Document`
        Currently active Bokeh document
    logger : :class:`~logging.Logger`
        Logger instance
    control_panels : :obj:`dict`
        Dictionary with :class:`~pyhdx.panel.base.ControlPanel` instances (__name__ as keys)
    figure_panels : :obj:`dict`
        Dictionary with :class:`~pyhdx.panel.base.FigurePanel` instances (__name__ as keys)

    """

    _type = "base"

    sources = param.Dict(
        {}, doc="Dictionary of source objects available for plotting", precedence=-1
    )
    transforms = param.Dict({}, doc="Dictionary of transforms")
    opts = param.Dict({}, doc="Dictionary of formatting options (opts)")
    views = param.Dict({}, doc="Dictionary of views")

    loggers = param.Dict({}, doc="Dictionary of loggers")

    def __init__(self, control_panels: List[Tuple[Type[ControlPanel], Dict]], **params):
        super(MainController, self).__init__(**params)

        self.control_panels = {
            ctrl.name: ctrl(self, **kwargs) for ctrl, kwargs in control_panels
        }  # todo as param?

        self.template = None  # Panel template (remove?)

        self.session_time = datetime.now()
        self.update()  # todo check to see if this is really needed

    # from lumen.target.Target
    def _rerender(self, *events, invalidate_cache=False):
        self._update_views(invalidate_cache=invalidate_cache)

    # todo remove?
    def _update_views(self, invalidate_cache=True, update_views=True, events=[]):
        warnings.warn("update view is deprecated", DeprecationWarning)
        for view in self.views.values():
            view.update()

    @property
    def panel(self):
        warnings.warn("panel property is deprecated", DeprecationWarning)
        # todo remove?
        return self.template

    def update(self):
        for view in self.views.values():
            view.update()

PeptideController

Bases: MainController

Object which models D-uptake of the peptide in time

Source code in pyhdx/web/main_controllers.py
193
194
195
196
197
198
199
200
class PeptideController(MainController):

    """Object which models D-uptake of the peptide in time"""

    _type = "peptide"

    def __init__(self, *args, **params) -> None:
        super().__init__(*args, **params)

PyHDXController

Bases: MainController

Main controller for PyHDX web application.

Source code in pyhdx/web/main_controllers.py
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
class PyHDXController(MainController):
    """
    Main controller for PyHDX web application.

    """

    _type = "pyhdx"

    sample_name = param.String(doc="Name describing the selected protein(s) state")

    def __init__(self, *args, **kwargs):
        super(PyHDXController, self).__init__(*args, **kwargs)

        self.log_io = StringIO()
        sh = logging.StreamHandler(self.log_io)
        sh.terminator = "  \n"
        # sh.setLevel(logging.CRITICAL)
        formatter = logging.Formatter(
            "%(asctime)s [%(levelname)s]: %(message)s", "%Y-%m-%d %H:%M:%S"
        )
        sh.setFormatter(formatter)
        self.logger.addHandler(sh)

    @property
    def logger(self):
        return self.loggers["pyhdx"]

    def _get_file_header(self) -> str:
        """
        Returns header for txt file outputs with version and date/time information

        """

        s = f"# {pyhdx.VERSION_STRING} \n"
        s += (
            f"# {self.session_time.strftime('%Y/%m/%d %H:%M:%S')}"
            f"({int(self.session_time.timestamp())})\n"
        )

        return s

    def hdx_spec_callback(self) -> Optional[StringIO]:
        """
        Get a StringIO with input HDX measurement specifications.

        """
        input_controllers = {"PeptideFileInputControl", "PeptideRFUFileInputControl"}
        input_ctrls = self.control_panels.keys() & input_controllers
        if len(input_ctrls) == 1:
            input_ctrl = self.control_panels[list(input_ctrls)[0]]

            s = yaml.dump(clean_types(input_ctrl.hdx_spec), sort_keys=False)
            output = self._get_file_header() + "\n" + s
            sio = StringIO(output)

            return sio
        else:
            return None

    def config_callback(self) -> StringIO:
        """
        Get a StringIO with global configuration settings.

        """

        masked_conf = OmegaConf.masked_copy(cfg.conf, cfg.conf.keys() - {"server"})
        s = OmegaConf.to_yaml(masked_conf)

        output = self._get_file_header() + "\n" + s
        sio = StringIO(output)

        return sio

    def user_settings_callback(self) -> StringIO:
        """
        Get a StringIO with user settings.

        """
        user_dict = self.sources["metadata"].get("user_settings")
        s = yaml.dump(clean_types(user_dict), sort_keys=False)

        output = self._get_file_header() + "\n" + s
        sio = StringIO(output)

        return sio

    def log_callback(self) -> StringIO:
        """
        Get a StringIO with the full log.

        """

        self.log_io.seek(0)
        s = self.log_io.read()

        output = self._get_file_header() + "\n" + s
        sio = StringIO(output)

        return sio

config_callback()

Get a StringIO with global configuration settings.

Source code in pyhdx/web/main_controllers.py
150
151
152
153
154
155
156
157
158
159
160
161
162
def config_callback(self) -> StringIO:
    """
    Get a StringIO with global configuration settings.

    """

    masked_conf = OmegaConf.masked_copy(cfg.conf, cfg.conf.keys() - {"server"})
    s = OmegaConf.to_yaml(masked_conf)

    output = self._get_file_header() + "\n" + s
    sio = StringIO(output)

    return sio

hdx_spec_callback()

Get a StringIO with input HDX measurement specifications.

Source code in pyhdx/web/main_controllers.py
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
def hdx_spec_callback(self) -> Optional[StringIO]:
    """
    Get a StringIO with input HDX measurement specifications.

    """
    input_controllers = {"PeptideFileInputControl", "PeptideRFUFileInputControl"}
    input_ctrls = self.control_panels.keys() & input_controllers
    if len(input_ctrls) == 1:
        input_ctrl = self.control_panels[list(input_ctrls)[0]]

        s = yaml.dump(clean_types(input_ctrl.hdx_spec), sort_keys=False)
        output = self._get_file_header() + "\n" + s
        sio = StringIO(output)

        return sio
    else:
        return None

log_callback()

Get a StringIO with the full log.

Source code in pyhdx/web/main_controllers.py
177
178
179
180
181
182
183
184
185
186
187
188
189
def log_callback(self) -> StringIO:
    """
    Get a StringIO with the full log.

    """

    self.log_io.seek(0)
    s = self.log_io.read()

    output = self._get_file_header() + "\n" + s
    sio = StringIO(output)

    return sio

user_settings_callback()

Get a StringIO with user settings.

Source code in pyhdx/web/main_controllers.py
164
165
166
167
168
169
170
171
172
173
174
175
def user_settings_callback(self) -> StringIO:
    """
    Get a StringIO with user settings.

    """
    user_dict = self.sources["metadata"].get("user_settings")
    s = yaml.dump(clean_types(user_dict), sort_keys=False)

    output = self._get_file_header() + "\n" + s
    sio = StringIO(output)

    return sio