diff --git a/src/octoprint/plugins/cura/__init__.py b/src/octoprint/plugins/cura/__init__.py index 1271f88a..a756d885 100644 --- a/src/octoprint/plugins/cura/__init__.py +++ b/src/octoprint/plugins/cura/__init__.py @@ -16,91 +16,8 @@ import octoprint.util import octoprint.slicing import octoprint.settings -default_settings = { - "cura_engine": None, - "default_profile": None, - "debug_logging": False -} -s = octoprint.plugin.plugin_settings("cura", defaults=default_settings) - from .profile import Profile -blueprint = flask.Blueprint("plugin.cura", __name__) - -@blueprint.route("/import", methods=["POST"]) -def importCuraProfile(): - import datetime - import tempfile - - from octoprint.server import slicingManager - - input_name = "file" - input_upload_name = input_name + "." + s.globalGet(["server", "uploads", "nameSuffix"]) - input_upload_path = input_name + "." + s.globalGet(["server", "uploads", "pathSuffix"]) - - if input_upload_name in flask.request.values and input_upload_path in flask.request.values: - filename = flask.request.values[input_upload_name] - try: - profile_dict = Profile.from_cura_ini(flask.request.values[input_upload_path]) - except Exception as e: - return flask.make_response("Something went wrong while converting imported profile: {message}".format(e.message), 500) - - elif input_name in flask.request.files: - temp_file = tempfile.NamedTemporaryFile("wb", delete=False) - try: - temp_file.close() - upload = flask.request.files[input_name] - upload.save(temp_file.name) - profile_dict = Profile.from_cura_ini(temp_file.name) - except Exception as e: - return flask.make_response("Something went wrong while converting imported profile: {message}".format(e.message), 500) - finally: - os.remove(temp_file) - - filename = upload.filename - - else: - return flask.make_response("No file included", 400) - - if profile_dict is None: - return flask.make_response("Could not convert Cura profile", 400) - - name, _ = os.path.splitext(filename) - - # default values for name, display name and description - profile_name = _sanitize_name(name) - profile_display_name = name - profile_description = "Imported from {filename} on {date}".format(filename=filename, date=octoprint.util.getFormattedDateTime(datetime.datetime.now())) - profile_allow_overwrite = False - - # overrides - if "name" in flask.request.values: - profile_name = flask.request.values["name"] - if "displayName" in flask.request.values: - profile_display_name = flask.request.values["displayName"] - if "description" in flask.request.values: - profile_description = flask.request.values["description"] - if "allowOverwrite" in flask.request.values: - from octoprint.server.api import valid_boolean_trues - profile_allow_overwrite = flask.request.values["allowOverwrite"] in valid_boolean_trues - - slicingManager.save_profile("cura", - profile_name, - profile_dict, - allow_overwrite=profile_allow_overwrite, - display_name=profile_display_name, - description=profile_description) - - result = dict( - resource=flask.url_for("api.slicingGetSlicerProfile", slicer="cura", name=profile_name, _external=True), - displayName=profile_display_name, - description=profile_description - ) - r = flask.make_response(flask.jsonify(result), 201) - r.headers["Location"] = result["resource"] - return r - - class CuraPlugin(octoprint.plugin.SlicerPlugin, octoprint.plugin.SettingsPlugin, octoprint.plugin.TemplatePlugin, @@ -122,19 +39,88 @@ class CuraPlugin(octoprint.plugin.SlicerPlugin, def on_startup(self, host, port): # setup our custom logger - cura_logging_handler = logging.handlers.RotatingFileHandler(s.getPluginLogfilePath(postfix="engine"), maxBytes=2*1024*1024) + cura_logging_handler = logging.handlers.RotatingFileHandler(self._settings.getPluginLogfilePath(postfix="engine"), maxBytes=2*1024*1024) cura_logging_handler.setFormatter(logging.Formatter("%(asctime)s %(message)s")) cura_logging_handler.setLevel(logging.DEBUG) self._cura_logger.addHandler(cura_logging_handler) - self._cura_logger.setLevel(logging.DEBUG if s.getBoolean(["debug_logging"]) else logging.CRITICAL) + self._cura_logger.setLevel(logging.DEBUG if self._settings.getBoolean(["debug_logging"]) else logging.CRITICAL) self._cura_logger.propagate = False ##~~ BlueprintPlugin API - def get_blueprint(self): - global blueprint - return blueprint + @octoprint.plugin.BlueprintPlugin.route("/import", methods=["POST"]) + def importCuraProfile(self): + import datetime + import tempfile + + from octoprint.server import slicingManager + + input_name = "file" + input_upload_name = input_name + "." + self._settings.globalGet(["server", "uploads", "nameSuffix"]) + input_upload_path = input_name + "." + self._settings.globalGet(["server", "uploads", "pathSuffix"]) + + if input_upload_name in flask.request.values and input_upload_path in flask.request.values: + filename = flask.request.values[input_upload_name] + try: + profile_dict = Profile.from_cura_ini(flask.request.values[input_upload_path]) + except Exception as e: + return flask.make_response("Something went wrong while converting imported profile: {message}".format(e.message), 500) + + elif input_name in flask.request.files: + temp_file = tempfile.NamedTemporaryFile("wb", delete=False) + try: + temp_file.close() + upload = flask.request.files[input_name] + upload.save(temp_file.name) + profile_dict = Profile.from_cura_ini(temp_file.name) + except Exception as e: + return flask.make_response("Something went wrong while converting imported profile: {message}".format(e.message), 500) + finally: + os.remove(temp_file) + + filename = upload.filename + + else: + return flask.make_response("No file included", 400) + + if profile_dict is None: + return flask.make_response("Could not convert Cura profile", 400) + + name, _ = os.path.splitext(filename) + + # default values for name, display name and description + profile_name = _sanitize_name(name) + profile_display_name = name + profile_description = "Imported from {filename} on {date}".format(filename=filename, date=octoprint.util.getFormattedDateTime(datetime.datetime.now())) + profile_allow_overwrite = False + + # overrides + if "name" in flask.request.values: + profile_name = flask.request.values["name"] + if "displayName" in flask.request.values: + profile_display_name = flask.request.values["displayName"] + if "description" in flask.request.values: + profile_description = flask.request.values["description"] + if "allowOverwrite" in flask.request.values: + from octoprint.server.api import valid_boolean_trues + profile_allow_overwrite = flask.request.values["allowOverwrite"] in valid_boolean_trues + + slicingManager.save_profile("cura", + profile_name, + profile_dict, + allow_overwrite=profile_allow_overwrite, + display_name=profile_display_name, + description=profile_description) + + result = dict( + resource=flask.url_for("api.slicingGetSlicerProfile", slicer="cura", name=profile_name, _external=True), + displayName=profile_display_name, + description=profile_description + ) + r = flask.make_response(flask.jsonify(result), 201) + r.headers["Location"] = result["resource"] + return r ##~~ AssetPlugin API @@ -147,32 +133,29 @@ class CuraPlugin(octoprint.plugin.SlicerPlugin, ##~~ SettingsPlugin API - def on_settings_load(self): - return dict( - cura_engine=s.get(["cura_engine"]), - default_profile=s.get(["default_profile"]), - debug_logging=s.getBoolean(["debug_logging"]) - ) - def on_settings_save(self, data): - if "cura_engine" in data and data["cura_engine"]: - s.set(["cura_engine"], data["cura_engine"]) - if "default_profile" in data and data["default_profile"]: - s.set(["default_profile"], data["default_profile"]) - if "debug_logging" in data: - old_debug_logging = s.getBoolean(["debug_logging"]) - new_debug_logging = data["debug_logging"] in octoprint.settings.valid_boolean_trues - if old_debug_logging != new_debug_logging: - if new_debug_logging: - self._cura_logger.setLevel(logging.DEBUG) - else: - self._cura_logger.setLevel(logging.CRITICAL) - s.setBoolean(["debug_logging"], new_debug_logging) + old_debug_logging = self._settings.getBoolean(["debug_logging"]) + + super(CuraPlugin, self).on_settings_save(data) + + new_debug_logging = self._settings.getBoolean(["debug_logging"]) + if old_debug_logging != new_debug_logging: + if new_debug_logging: + self._cura_logger.setLevel(logging.DEBUG) + else: + self._cura_logger.setLevel(logging.CRITICAL) + + def get_settings_defaults(self): + return dict( + cura_engine=None, + default_profile=None, + debug_logging=False + ) ##~~ SlicerPlugin API def is_slicer_configured(self): - cura_engine = s.get(["cura_engine"]) + cura_engine = self._settings.get(["cura_engine"]) if cura_engine is not None and os.path.exists(cura_engine): return True else: @@ -187,7 +170,7 @@ class CuraPlugin(octoprint.plugin.SlicerPlugin, ) def get_slicer_default_profile(self): - path = s.get(["default_profile"]) + path = self._settings.get(["default_profile"]) if not path: path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "profiles", "default.profile.yaml") return self.get_slicer_profile(path) @@ -221,7 +204,7 @@ class CuraPlugin(octoprint.plugin.SlicerPlugin, try: with self._job_mutex: if not profile_path: - profile_path = s.get(["default_profile"]) + profile_path = self._settings.get(["default_profile"]) if not machinecode_path: path, _ = os.path.splitext(model_path) machinecode_path = path + ".gco" @@ -243,7 +226,7 @@ class CuraPlugin(octoprint.plugin.SlicerPlugin, engine_settings = self._convert_to_engine(profile_path, printer_profile, posX, posY) - executable = s.get(["cura_engine"]) + executable = self._settings.get(["cura_engine"]) if not executable: return False, "Path to CuraEngine is not configured " diff --git a/src/octoprint/plugins/cura/profile.py b/src/octoprint/plugins/cura/profile.py index 7b55bd58..6587c527 100644 --- a/src/octoprint/plugins/cura/profile.py +++ b/src/octoprint/plugins/cura/profile.py @@ -6,8 +6,6 @@ __license__ = 'GNU Affero General Public License http://www.gnu.org/licenses/agp __copyright__ = "Copyright (C) 2014 The OctoPrint Project - Released under terms of the AGPLv3 License" -from . import s - import re class SupportLocationTypes(object): diff --git a/src/octoprint/plugins/cura/static/js/cura.js b/src/octoprint/plugins/cura/static/js/cura.js index 01002822..e782a881 100644 --- a/src/octoprint/plugins/cura/static/js/cura.js +++ b/src/octoprint/plugins/cura/static/js/cura.js @@ -100,7 +100,7 @@ $(function() { self.profileDescription(undefined); self.profileAllowOverwrite(true); - $("#settings-plugin-cura-import").modal("hide"); + $("#settings_plugin_cura_import").modal("hide"); self.requestData(); self.slicingViewModel.requestData(); }