def _load_profile(self, path): profile, display_name, description = Profile.from_slic3r_ini(path) return profile, display_name, description
def importSlic3rProfile(self): import datetime import tempfile self._logger.info("importSlic3rProfile") input_name = "file" input_upload_name = input_name + "." + self._settings.global_get(["server", "uploads", "nameSuffix"]) input_upload_path = input_name + "." + self._settings.global_get(["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, imported_name, imported_description = Profile.from_slic3r_ini( flask.request.values[input_upload_path]) except Exception as e: return flask.make_response( "Something went wrong while converting imported profile: {}".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, imported_name, imported_description = Profile.from_slic3r_ini(temp_file.name) # profile_dict, imported_name, imported_description = None, None, None except Exception as e: return flask.make_response( "Something went wrong while converting imported profile: {}".format(e.message), 500) finally: os.remove(temp_file) filename = upload.filename else: return flask.make_response("No file included", 400) name, _ = os.path.splitext(filename) # default values for name, display name and description profile_name = _sanitize_name(name) profile_display_name = imported_name if imported_name is not None else name profile_description = imported_description if imported_description is not None \ else "Imported from {filename} on {date}".format( filename=filename, date=octoprint.util.get_formatted_datetime(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 self._slicing_manager.save_profile("preprintservice", 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="preprintservice", name=profile_name, external=False), displayName=profile_display_name, description=profile_description ) r = flask.make_response(flask.jsonify(result), 201) r.headers["Location"] = result["resource"] return r