def __init__(self, name): """Initialize the class. Parameters ---------- name : str Tab name for the configuration view. """ BaseController.__init__(self, name) self.model = ScienceModel() self.widget = ScienceWidget(name) self.extra_props = None self.extra_props_dir = None self.widget.create_tabs(self.model.general_params) self.widget.set_information(self.model.general_params) self.widget.create_tabs(self.model.sequence_params) self.widget.set_information(self.model.sequence_params) for i in range(self.widget.count()): tab = self.widget.widget(i) tab.checkProperty.connect(self.check_property) tab.getProperty.connect(self.get_property) tab.saveConfiguration.connect(self.save_configuration)
class ScienceController(BaseController): """The controller for the science proposal configuration. """ def __init__(self, name): """Initialize the class. Parameters ---------- name : str Tab name for the configuration view. """ BaseController.__init__(self, name) self.model = ScienceModel() self.widget = ScienceWidget(name) self.widget.create_tabs(self.model.general_params) self.widget.set_information(self.model.general_params) for i in xrange(self.widget.count()): tab = self.widget.widget(i) tab.checkProperty.connect(self.check_property) tab.getProperty.connect(self.get_property) tab.saveConfiguration.connect(self.save_configuration) @QtCore.pyqtSlot(str, str, list) def check_property(self, param_name, param_value, position): """Check the stored value of the parameter name against input. Parameters ---------- param_name : str The parameter name to retrieve the stored value of. param_value : any The value of the parameter to check against the stored one. position : list(int) The widget position that requested this check. """ is_changed = self.model.check_parameter(str(param_name), param_value) home_tab = str(param_name).split('/')[0] self.widget.is_changed(position, is_changed, home_tab=home_tab) @QtCore.pyqtSlot(str, list) def get_property(self, param_name, position): """Get the property value for the requested name. Parameters ---------- param_name : str The parameter name to retrieve the stored value of. position : list(int) The widget position that requested this check. """ pvalue = str(self.model.get_parameter(str(param_name))) home_tab = str(param_name).split('/')[0] self.widget.reset_field(position, pvalue, home_tab=home_tab)
class ScienceModelTest(unittest.TestCase): def setUp(self): self.model = ScienceModel() self.num_general_proposals = 4 self.num_sequence_proposals = 1 def test_basic_information_after_creation(self): self.assertEqual(len(self.model.get_proposal_names()), self.num_general_proposals + self.num_sequence_proposals) general_params = self.model.general_params self.assertEqual(len(general_params), self.num_general_proposals) self.assertEqual(len(general_params[list(general_params.keys())[0]]), 7) sequence_params = self.model.sequence_params self.assertEqual(len(sequence_params), self.num_sequence_proposals) self.assertEqual(len(sequence_params[list(sequence_params.keys())[0]]), 9) for k, v in self.model.general_params.items(): if k == "SouthCelestialPole": self.assertIsNotNone(v["sky_exclusion"]) self.assertIsNotNone(v["filters"]["value"]["u"]) for k, v in self.model.general_modules.items(): if k == "SouthCelestialPole": self.assertEqual(v, "lsst.sims.ocs.configuration.science.south_celestial_pole") for k, v in self.model.sequence_modules.items(): if k == "DeepDrillingCosmology1": self.assertEqual(v, "lsst.sims.ocs.configuration.science.deep_drilling_cosmology1")
def remove_extra_proposals(self): """Remove the extra proposal tab widgets. This function handles removing the extra proposal tab widgets from the science tab widget and resets the model. """ self.extra_props_dir = None for extra_prop in self.extra_props: for i in range(self.widget.count()): tab = self.widget.widget(i) if tab.name == extra_prop: tab.checkProperty.disconnect(self.check_property) tab.getProperty.disconnect(self.get_property) tab.saveConfiguration.disconnect(self.save_configuration) tab.deleteLater() self.extra_props = None del self.model self.model = ScienceModel()
class ScienceModelTest(unittest.TestCase): def setUp(self): self.model = ScienceModel() self.num_proposals = 4 def test_basic_information_after_creation(self): general_params = self.model.general_params self.assertEqual(len(general_params), self.num_proposals) self.assertEqual(len(general_params[general_params.keys()[0]]), 7) self.assertEqual(len(self.model.get_proposal_names()), self.num_proposals) for k, v in self.model.general_params.items(): if k == "SouthCelestialPole": self.assertIsNotNone(v["sky_exclusion"]) for k, v in self.model.general_modules.items(): if k == "SouthCelestialPole": self.assertEqual(v, "lsst.sims.ocs.configuration.science.south_celestial_pole")
def __init__(self, name): """Initialize the class. Parameters ---------- name : str Tab name for the configuration view. """ BaseController.__init__(self, name) self.model = ScienceModel() self.widget = ScienceWidget(name) self.widget.create_tabs(self.model.general_params) self.widget.set_information(self.model.general_params) for i in xrange(self.widget.count()): tab = self.widget.widget(i) tab.checkProperty.connect(self.check_property) tab.getProperty.connect(self.get_property) tab.saveConfiguration.connect(self.save_configuration)
def setUp(self): self.model = ScienceModel() self.num_proposals = 4
def setUp(self): self.model = ScienceModel() self.num_general_proposals = 4 self.num_sequence_proposals = 1
class ScienceController(BaseController): """The controller for the science proposal configuration. """ def __init__(self, name): """Initialize the class. Parameters ---------- name : str Tab name for the configuration view. """ BaseController.__init__(self, name) self.model = ScienceModel() self.widget = ScienceWidget(name) self.extra_props = None self.extra_props_dir = None self.widget.create_tabs(self.model.general_params) self.widget.set_information(self.model.general_params) self.widget.create_tabs(self.model.sequence_params) self.widget.set_information(self.model.sequence_params) for i in range(self.widget.count()): tab = self.widget.widget(i) tab.checkProperty.connect(self.check_property) tab.getProperty.connect(self.get_property) tab.saveConfiguration.connect(self.save_configuration) def apply_overrides(self, config_files, extra_props=None): """Apply configuration overrides. Parameters ---------- config_files : list The list of configuration file paths. extra_props : str, optional A path for extra proposals. """ new_params = self.model.apply_overrides(config_files, extra_props=extra_props) self.extra_props_dir = extra_props self.widget.create_tabs(new_params.new_general) self.widget.set_information(new_params.new_general) self.widget.create_tabs(new_params.new_sequence) self.widget.set_information(new_params.new_sequence) new_props = list(new_params.new_general.keys()) + list( new_params.new_sequence.keys()) self.extra_props = new_props for i in range(self.widget.count()): tab = self.widget.widget(i) if tab.name in new_props: tab.checkProperty.connect(self.check_property) tab.getProperty.connect(self.get_property) tab.saveConfiguration.connect(self.save_configuration) self.widget.set_information(new_params.general_params, full_check=True) self.widget.set_information(new_params.sequence_params, full_check=True) self.widget.finish_overrides() @QtCore.pyqtSlot(str, str, list) def check_property(self, param_name, param_value, position): """Check the stored value of the parameter name against input. Parameters ---------- param_name : str The parameter name to retrieve the stored value of. param_value : any The value of the parameter to check against the stored one. position : list(int) The widget position that requested this check. """ is_changed = self.model.check_parameter(str(param_name), param_value) home_tab = str(param_name).split('/')[0] self.widget.is_changed(position, is_changed, home_tab=home_tab) @QtCore.pyqtSlot(str, list) def get_property(self, param_name, position): """Get the property value for the requested name. Parameters ---------- param_name : str The parameter name to retrieve the stored value of. position : list(int) The widget position that requested this check. """ pvalue = str(self.model.get_parameter(str(param_name))) home_tab = str(param_name).split('/')[0] self.widget.reset_field(position, pvalue, home_tab=home_tab) def remove_extra_proposals(self): """Remove the extra proposal tab widgets. This function handles removing the extra proposal tab widgets from the science tab widget and resets the model. """ self.extra_props_dir = None for extra_prop in self.extra_props: for i in range(self.widget.count()): tab = self.widget.widget(i) if tab.name == extra_prop: tab.checkProperty.disconnect(self.check_property) tab.getProperty.disconnect(self.get_property) tab.saveConfiguration.disconnect(self.save_configuration) tab.deleteLater() self.extra_props = None del self.model self.model = ScienceModel() @QtCore.pyqtSlot(str, str, list) def save_configuration(self, save_dir, name, changed_params): """Delegate configuration saving to model. Parameters ---------- save_dir : str The directory to save the configuration information to. name : str Name of the configuration to save. changed_params : dict The set of changed information. """ if len(changed_params) and self.extra_props_dir is not None: prop_file = os.path.join(self.extra_props_dir, filename_from_proposal_name(name)) if os.path.exists(prop_file): copy_loc = os.path.join(save_dir, NEW_PROPS_DIR) if not os.path.exists(copy_loc): os.makedirs(copy_loc) shutil.copy(prop_file, copy_loc) BaseController.save_configuration(self, save_dir, name, changed_params)