def test_get_and_set_drips_per_second(self, mock_SubLayerGenerator, mock_TimedDripZAxis, mock_AudioModulationLaserControl, mock_GCodeReader, mock_AudioWriter, mock_Transformer, mock_PathToAudio, mock_Controller, ): gcode_path = "FakeFile" expected_drips_per_second = 12 mock_timeddripzaxis = mock_TimedDripZAxis.return_value mock_timeddripzaxis.get_drips_per_second.return_value = expected_drips_per_second config = self.default_config config.dripper.dripper_type = 'emulated' api = PrintAPI(config) api.print_gcode(gcode_path) mock_TimedDripZAxis.assert_called_with(config.dripper.drips_per_mm, drips_per_second = config.dripper.emulated_drips_per_second) self.assertTrue(api.can_set_drips_per_second()) api.set_drips_per_second(expected_drips_per_second) self.assertEquals(expected_drips_per_second, api.get_drips_per_second()) mock_timeddripzaxis.set_drips_per_second.assert_called_with(expected_drips_per_second)
def test_get_and_set_drips_per_second( self, mock_SubLayerGenerator, mock_TimedDripZAxis, mock_AudioModulationLaserControl, mock_GCodeReader, mock_AudioWriter, mock_Transformer, mock_PathToAudio, mock_Controller, ): gcode_path = "FakeFile" expected_drips_per_second = 12 mock_timeddripzaxis = mock_TimedDripZAxis.return_value mock_timeddripzaxis.get_drips_per_second.return_value = expected_drips_per_second config = self.default_config config.dripper.dripper_type = 'emulated' api = PrintAPI(config) api.print_gcode(gcode_path) mock_TimedDripZAxis.assert_called_with( config.dripper.drips_per_mm, drips_per_second=config.dripper.emulated_drips_per_second) self.assertTrue(api.can_set_drips_per_second()) api.set_drips_per_second(expected_drips_per_second) self.assertEquals(expected_drips_per_second, api.get_drips_per_second()) mock_timeddripzaxis.set_drips_per_second.assert_called_with( expected_drips_per_second)
def test_set_drips_per_second_throws_error_if_not_using_emulated_drips(self, mock_SubLayerGenerator, mock_AudioDripZAxis, mock_AudioModulationLaserControl, mock_GCodeReader, mock_AudioWriter, mock_Transformer, mock_PathToAudio, mock_Controller, ): gcode_path = "FakeFile" mock_audiodripzaxis = mock_AudioDripZAxis.return_value mock_audiodripzaxis.set_drips_per_second.side_effect = Exception() config = self.default_config api = PrintAPI(config) api.print_gcode(gcode_path) with self.assertRaises(Exception): api.set_drips_per_second(12)
def test_set_drips_per_second_throws_error_if_not_using_emulated_drips( self, mock_SubLayerGenerator, mock_AudioDripZAxis, mock_AudioModulationLaserControl, mock_GCodeReader, mock_AudioWriter, mock_Transformer, mock_PathToAudio, mock_Controller, ): gcode_path = "FakeFile" mock_audiodripzaxis = mock_AudioDripZAxis.return_value mock_audiodripzaxis.set_drips_per_second.side_effect = Exception() config = self.default_config api = PrintAPI(config) api.print_gcode(gcode_path) with self.assertRaises(Exception): api.set_drips_per_second(12)
class PrintStatusUI(PeachyFrame): def initialize(self): self.grid() self._print_api = None self._elapsed_time = StringVar() self._current_layer = IntVar() self._current_height = StringVar() self._current_model_height = StringVar() self._current_drips = IntVar() self._waiting_for_drips = StringVar() self._skipped_layers = IntVar() self._status = StringVar() self._stop_button_text = StringVar() self._stop_button_text.set("Abort Print") self._drips_per_second_setting = DoubleVar() Label(self, text = "Elapsed Time" ).grid(column=0,row=10) Label(self, textvariable = self._elapsed_time ).grid(column=1,row=10) Label(self, text = "Layer" ).grid(column=0,row=20) Label(self, textvariable = self._current_layer ).grid(column=1,row=20) Label(self, text = "Actual Height (mm)" ).grid(column=0,row=30) Label(self, textvariable = self._current_height ).grid(column=1,row=30) Label(self, text = "Model Height (mm)" ).grid(column=0,row=35) Label(self, textvariable = self._current_model_height ).grid(column=1,row=35) Label(self, text = "Drips" ).grid(column=0,row=40) Label(self, textvariable = self._current_drips ).grid(column=1,row=40) Label(self, text = "Waiting for drips" ).grid(column=0,row=50) Label(self, textvariable = self._waiting_for_drips ).grid(column=1,row=50) Label(self, text = "Skipped Layers" ).grid(column=0,row=55) Label(self, textvariable = self._skipped_layers ).grid(column=1,row=55) Label(self, text = "Status").grid(column=0,row=60) Label(self, textvariable = self._status).grid(column=1,row=60) self.options_frame = LabelFrame(self, text="In Print Options", padx=5, pady=5) self.options_frame.grid(column=12,row=10,rowspan = 60,sticky=N+S+E+W) self.options_frame.grid_remove() Label(self.options_frame, text = 'Drips Per Second').grid(column=0,row=10) RylanSpinbox(self.options_frame, from_=0.0, to=100.0, increment= 0.1, command = self._dps_changed, textvariable = self._drips_per_second_setting).grid(column=1,row=10) Label(self).grid(column=0,row=70) Button(self,textvariable=self._stop_button_text, command=self._stop_button_click).grid(column=2,row=80) self._print_api = PrintAPI(self.kwargs['config'],status_call_back = self.status_call_back) if 'filename' in self.kwargs: file_to_print = self.kwargs['filename'] self._print_api.print_gcode(file_to_print) else: self._print_api.print_layers(self.kwargs['layer_generator']) if self._print_api.can_set_drips_per_second(): self.options_frame.grid() self._drips_per_second_setting.set(self._print_api.get_drips_per_second()) self.update() def _stop_button_click(self): self._print_api.stop() self.navigate(self.kwargs['calling_class'], printer = self.kwargs['printer']) def status_call_back(self,status): total_seconds = int(status['elapsed_time'].total_seconds()) hours, remainder = divmod(total_seconds,60*60) minutes, seconds = divmod(remainder,60) self._elapsed_time.set("%02d:%02d:%02d" % (hours,minutes,seconds)) self._current_layer.set(status['current_layer']) self._current_height.set("%.2f" % status['height']) self._current_model_height.set("%.2f" % status['model_height']) self._current_drips.set(status['drips']) self._waiting_for_drips.set("Yes" if status['waiting_for_drips'] else "No") self._skipped_layers.set(status['skipped_layers']) self._status.set(status['status']) if (status['status'] == "Complete"): self._stop_button_text.set("Finished") def _dps_changed(self): self._print_api.set_drips_per_second(self._drips_per_second_setting.get()) def close(self): if self._print_api: self._print_api.stop()
class PrintStatusUI(PeachyFrame): def initialize(self): self.grid() self._print_api = None self._elapsed_time = StringVar() self._current_layer = IntVar() self._current_height = StringVar() self._current_model_height = StringVar() self._current_drips = IntVar() self._waiting_for_drips = StringVar() self._skipped_layers = IntVar() self._status = StringVar() self._stop_button_text = StringVar() self._stop_button_text.set("Abort Print") self._drips_per_second_setting = DoubleVar() Label(self, text="Elapsed Time").grid(column=0, row=10) Label(self, textvariable=self._elapsed_time).grid(column=1, row=10) Label(self, text="Layer").grid(column=0, row=20) Label(self, textvariable=self._current_layer).grid(column=1, row=20) Label(self, text="Actual Height (mm)").grid(column=0, row=30) Label(self, textvariable=self._current_height).grid(column=1, row=30) Label(self, text="Model Height (mm)").grid(column=0, row=35) Label(self, textvariable=self._current_model_height).grid(column=1, row=35) Label(self, text="Drips").grid(column=0, row=40) Label(self, textvariable=self._current_drips).grid(column=1, row=40) Label(self, text="Waiting for drips").grid(column=0, row=50) Label(self, textvariable=self._waiting_for_drips).grid(column=1, row=50) Label(self, text="Skipped Layers").grid(column=0, row=55) Label(self, textvariable=self._skipped_layers).grid(column=1, row=55) Label(self, text="Status").grid(column=0, row=60) Label(self, textvariable=self._status).grid(column=1, row=60) self.options_frame = LabelFrame(self, text="In Print Options", padx=5, pady=5) self.options_frame.grid(column=12, row=10, rowspan=60, sticky=N + S + E + W) self.options_frame.grid_remove() Label(self.options_frame, text='Drips Per Second').grid(column=0, row=10) RylanSpinbox(self.options_frame, from_=0.0, to=100.0, increment=0.1, command=self._dps_changed, textvariable=self._drips_per_second_setting).grid( column=1, row=10) Label(self).grid(column=0, row=70) Button(self, textvariable=self._stop_button_text, command=self._stop_button_click).grid(column=2, row=80) self._print_api = PrintAPI(self.kwargs['config'], status_call_back=self.status_call_back) if 'filename' in self.kwargs: file_to_print = self.kwargs['filename'] self._print_api.print_gcode(file_to_print) else: self._print_api.print_layers(self.kwargs['layer_generator']) if self._print_api.can_set_drips_per_second(): self.options_frame.grid() self._drips_per_second_setting.set( self._print_api.get_drips_per_second()) self.update() def _stop_button_click(self): self._print_api.stop() self.navigate(self.kwargs['calling_class'], printer=self.kwargs['printer']) def status_call_back(self, status): total_seconds = int(status['elapsed_time'].total_seconds()) hours, remainder = divmod(total_seconds, 60 * 60) minutes, seconds = divmod(remainder, 60) self._elapsed_time.set("%02d:%02d:%02d" % (hours, minutes, seconds)) self._current_layer.set(status['current_layer']) self._current_height.set("%.2f" % status['height']) self._current_model_height.set("%.2f" % status['model_height']) self._current_drips.set(status['drips']) self._waiting_for_drips.set( "Yes" if status['waiting_for_drips'] else "No") self._skipped_layers.set(status['skipped_layers']) self._status.set(status['status']) if (status['status'] == "Complete"): self._stop_button_text.set("Finished") def _dps_changed(self): self._print_api.set_drips_per_second( self._drips_per_second_setting.get()) def close(self): if self._print_api: self._print_api.stop()