diff --git a/src/octoprint/printer/__init__.py b/src/octoprint/printer/__init__.py index e26a80e4..8e4b1e3c 100644 --- a/src/octoprint/printer/__init__.py +++ b/src/octoprint/printer/__init__.py @@ -299,6 +299,7 @@ class PrinterInterface(object): after the file is selected. Raises: + InvalidFileType: if the file is not a machinecode file and hence cannot be printed InvalidFileLocation: if an absolute path was provided and not contained within local storage or doesn't exist """ @@ -593,3 +594,6 @@ class UnknownScript(Exception): class InvalidFileLocation(Exception): pass + +class InvalidFileType(Exception): + pass diff --git a/src/octoprint/printer/standard.py b/src/octoprint/printer/standard.py index a0c1b817..45c309c7 100644 --- a/src/octoprint/printer/standard.py +++ b/src/octoprint/printer/standard.py @@ -17,9 +17,9 @@ import time from octoprint import util as util from octoprint.events import eventManager, Events -from octoprint.filemanager import FileDestinations, NoSuchStorage +from octoprint.filemanager import FileDestinations, NoSuchStorage, valid_file_type from octoprint.plugin import plugin_manager, ProgressPlugin -from octoprint.printer import PrinterInterface, PrinterCallback, UnknownScript, InvalidFileLocation +from octoprint.printer import PrinterInterface, PrinterCallback, UnknownScript, InvalidFileLocation, InvalidFileType from octoprint.printer.estimation import TimeEstimationHelper from octoprint.settings import settings from octoprint.util import comm as comm @@ -846,6 +846,9 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): self._stateMonitor.add_temperature(data) def _validateJob(self, filename, sd): + if not valid_file_type(filename, type="machinecode"): + raise InvalidFileType("{} is not a machinecode file, cannot print".format(filename)) + if sd: return