class ProjectLoader(object): def __init__(self, project_file_ext): self.project_reader = ProjectReader(project_file_ext) self.workspace_loader = WorkspaceLoader() self.plot_loader = PlotsLoader() self.decoder_factory = DecoderFactory() self.project_file_ext = project_file_ext def load_project(self, file_name, load_workspaces=True): """ Will load the project in the given file_name :param file_name: String or string castable object; the file_name of the project :param load_workspaces: Bool; True if you want ProjectLoader to handle loading workspaces else False. :return: Bool; True if all workspace loaded successfully, False if not loaded successfully. """ # It can be expected that if at this point it is NoneType that it's an error if file_name is None: return # Read project self.project_reader.read_project(file_name) directory = os.path.dirname(file_name) # Load in the workspaces if load_workspaces: self.workspace_loader.load_workspaces( directory=directory, workspaces_to_load=self.project_reader.workspace_names) workspace_success = _confirm_all_workspaces_loaded( workspaces_to_confirm=self.project_reader.workspace_names) if workspace_success: # Load plots if self.project_reader.plot_list is not None: self.plot_loader.load_plots(self.project_reader.plot_list) # Load interfaces if self.project_reader.interface_list is not None: self.load_interfaces(directory=directory) return workspace_success def load_interfaces(self, directory): for interface in self.project_reader.interface_list: # Find decoder decoder = self.decoder_factory.find_decoder(interface["tag"]) # Decode and Show the interface try: decoded_interface = decoder.decode(interface, directory) decoded_interface.show() except Exception as e: # Catch any exception and log it for the encoder if isinstance(e, KeyboardInterrupt): raise logger.warning( "Project Loader: An interface could not be loaded error: " + str(e))
class ProjectLoader(object): def __init__(self, project_file_ext): self.project_reader = ProjectReader(project_file_ext) self.workspace_loader = WorkspaceLoader() self.plot_loader = PlotsLoader() self.decoder_factory = DecoderFactory() self.project_file_ext = project_file_ext def load_project(self, file_name, load_workspaces=True): """ Will load the project in the given file_name :param file_name: String or string castable object; the file_name of the project :param load_workspaces: Bool; True if you want ProjectLoader to handle loading workspaces else False. :return: Bool; True if all workspace loaded successfully, False if not loaded successfully. """ # It can be expected that if at this point it is NoneType that it's an error if file_name is None: return # Read project self.project_reader.read_project(file_name) directory = os.path.dirname(file_name) # Load in the workspaces if load_workspaces: self.workspace_loader.load_workspaces(directory=directory, workspaces_to_load=self.project_reader.workspace_names) workspace_success = _confirm_all_workspaces_loaded(workspaces_to_confirm=self.project_reader.workspace_names) if workspace_success: # Load plots if self.project_reader.plot_list is not None: self.plot_loader.load_plots(self.project_reader.plot_list) # Load interfaces if self.project_reader.interface_list is not None: self.load_interfaces(directory=directory) return workspace_success def load_interfaces(self, directory): for interface in self.project_reader.interface_list: # Find decoder decoder = self.decoder_factory.find_decoder(interface["tag"]) # Decode and Show the interface try: decoded_interface = decoder.decode(interface, directory) decoded_interface.show() except Exception as e: # Catch any exception and log it for the encoder if isinstance(e, KeyboardInterrupt): raise logger.warning("Project Loader: An interface could not be loaded error: " + str(e))
def __init__(self, project_file_ext): self.project_reader = ProjectReader(project_file_ext) self.workspace_loader = WorkspaceLoader() self.plot_loader = PlotsLoader() self.decoder_factory = DecoderFactory() self.project_file_ext = project_file_ext
# Mantid Repository : https://github.com/mantidproject/mantid # # Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI, # NScD Oak Ridge National Laboratory, European Spallation Source # & Institut Laue - Langevin # SPDX - License - Identifier: GPL - 3.0 + # This file is part of the mantid workbench. from mantidqt.widgets.workspacedisplay.status_bar_view import StatusBarView from mantidqt.widgets.workspacedisplay.matrix.presenter import MatrixWorkspaceDisplay from mantidqt.widgets.workspacedisplay.matrix.io import MatrixWorkspaceDisplayDecoder, MatrixWorkspaceDisplayEncoder from mantidqt.project.encoderfactory import EncoderFactory from mantidqt.project.decoderfactory import DecoderFactory def compatible_check_for_encoder(obj, _): return isinstance(obj, StatusBarView) and isinstance( obj.presenter, MatrixWorkspaceDisplay) EncoderFactory.register_encoder(MatrixWorkspaceDisplayEncoder, compatible_check_for_encoder) DecoderFactory.register_decoder(MatrixWorkspaceDisplayDecoder)
def test_find_decoder_can_find_an_decoder(self): self.assertNotEqual(None, DecoderFactory.find_decoder("InstrumentView"))
def setUp(self): DecoderFactory.register_decoder(InstrumentViewEncoder)
# Mantid Repository : https://github.com/mantidproject/mantid # # Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI, # NScD Oak Ridge National Laboratory, European Spallation Source # & Institut Laue - Langevin # SPDX - License - Identifier: GPL - 3.0 + # This file is part of the mantidqt package. from mantidqt.project.decoderfactory import DecoderFactory from mantidqt.project.encoderfactory import EncoderFactory from mantidqt.widgets.workspacedisplay.status_bar_view import StatusBarView from mantidqt.widgets.workspacedisplay.table.io import TableWorkspaceDisplayDecoder, TableWorkspaceDisplayEncoder from mantidqt.widgets.workspacedisplay.table.presenter import TableWorkspaceDisplay def compatible_check_for_encoder(obj, _): return isinstance(obj, StatusBarView) and isinstance(obj.presenter, TableWorkspaceDisplay) DecoderFactory.register_decoder(TableWorkspaceDisplayDecoder) EncoderFactory.register_encoder(TableWorkspaceDisplayEncoder, compatible_check_for_encoder)
# # """ You can run this widget independently by for example: from mantidqt.widgets.instrumentview.presenter import InstrumentView from mantid.simpleapi import Load from qtpy.QtWidgets import QApplication ws=Load('CNCS_7860') app = QApplication([]) window = InstrumentView(ws) app.exec_() """ from __future__ import (absolute_import, unicode_literals) # 3rdparty imports from qtpy import PYQT4 from mantidqt.project.decoderfactory import DecoderFactory from mantidqt.project.encoderfactory import EncoderFactory from mantidqt.widgets.instrumentview.io import InstrumentViewDecoder, InstrumentViewEncoder if PYQT4: raise ImportError("Instrument view requires Qt >= v5") # Add encoder and decoders to the relevant factory DecoderFactory.register_decoder(InstrumentViewDecoder) EncoderFactory.register_encoder(InstrumentViewEncoder)
def test_decoder_is_in_decoder_factory(self): # Shows that the decoder has been registered on import of something from mantidqt.widget.instrumentview found_decoder = DecoderFactory.find_decoder("InstrumentView") self.assertIs(InstrumentViewDecoder, found_decoder.__class__)
# Mantid Repository : https://github.com/mantidproject/mantid # # Copyright © 2020 ISIS Rutherford Appleton Laboratory UKRI, # NScD Oak Ridge National Laboratory, European Spallation Source, # Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS # SPDX - License - Identifier: GPL - 3.0 + from mantidqt.project.decoderfactory import DecoderFactory from mantidqt.project.encoderfactory import EncoderFactory from mantidqtinterfaces.Engineering.gui.engineering_diffraction.engineering_diffraction import EngineeringDiffractionGui from mantidqtinterfaces.Engineering.gui.engineering_diffraction.engineering_diffraction_io import EngineeringDiffractionEncoder, \ EngineeringDiffractionDecoder def compatible_check_for_encoder(obj, _): return isinstance(obj, EngineeringDiffractionGui) DecoderFactory.register_decoder(EngineeringDiffractionDecoder) EncoderFactory.register_encoder(EngineeringDiffractionEncoder, compatible_check_for_encoder)
# """ You can run this widget independently by for example: from mantidqt.widgets.instrumentview.presenter import InstrumentView from mantid.simpleapi import Load from qtpy.QtWidgets import QApplication ws=Load('CNCS_7860') app = QApplication([]) window = InstrumentView(ws) app.exec_() """ from __future__ import (absolute_import, unicode_literals) # 3rdparty imports from qtpy import PYQT4 from mantidqt.project.decoderfactory import DecoderFactory from mantidqt.project.encoderfactory import EncoderFactory from mantidqt.widgets.instrumentview.io import InstrumentViewDecoder, InstrumentViewEncoder if PYQT4: raise ImportError("Instrument view requires Qt >= v5") # Add encoder and decoders to the relevant factory DecoderFactory.register_decoder(InstrumentViewDecoder) EncoderFactory.register_encoder(InstrumentViewEncoder)
# Mantid Repository : https://github.com/mantidproject/mantid # # Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI, # NScD Oak Ridge National Laboratory, European Spallation Source # & Institut Laue - Langevin # SPDX - License - Identifier: GPL - 3.0 + # This file is part of the mantid workbench. from mantidqt.widgets.workspacedisplay.status_bar_view import StatusBarView from mantidqt.widgets.workspacedisplay.table.presenter import TableWorkspaceDisplay from mantidqt.widgets.workspacedisplay.table.io import TableWorkspaceDisplayDecoder, TableWorkspaceDisplayEncoder from mantidqt.project.decoderfactory import DecoderFactory from mantidqt.project.encoderfactory import EncoderFactory def compatible_check_for_encoder(obj, _): return isinstance(obj, StatusBarView) and isinstance( obj.presenter, TableWorkspaceDisplay) DecoderFactory.register_decoder(TableWorkspaceDisplayDecoder) EncoderFactory.register_encoder(TableWorkspaceDisplayEncoder, compatible_check_for_encoder)
# Mantid Repository : https://github.com/mantidproject/mantid # # Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI, # NScD Oak Ridge National Laboratory, European Spallation Source # & Institut Laue - Langevin # SPDX - License - Identifier: GPL - 3.0 + # This file is part of the mantid workbench. from mantidqt.widgets.workspacedisplay.status_bar_view import StatusBarView from mantidqt.widgets.workspacedisplay.matrix.presenter import MatrixWorkspaceDisplay from mantidqt.widgets.workspacedisplay.matrix.io import MatrixWorkspaceDisplayDecoder, MatrixWorkspaceDisplayEncoder from mantidqt.project.encoderfactory import EncoderFactory from mantidqt.project.decoderfactory import DecoderFactory def compatible_check_for_encoder(obj, _): return isinstance(obj, StatusBarView) and isinstance(obj.presenter, MatrixWorkspaceDisplay) EncoderFactory.register_encoder(MatrixWorkspaceDisplayEncoder, compatible_check_for_encoder) DecoderFactory.register_decoder(MatrixWorkspaceDisplayDecoder)