def slicingPatchSlicerProfile(slicer, name): if not slicer in slicingManager.registered_slicers: return make_response("Unknown slicer {slicer}".format(**locals()), 404) if not "application/json" in request.headers["Content-Type"]: return None, None, make_response("Expected content-type JSON", 400) profile = slicingManager.load_profile(slicer, name) if not profile: return make_response("Profile not found", 404) json_data = request.json data = dict() display_name = None description = None if "data" in json_data: data = json_data["data"] if "displayName" in json_data: display_name = json_data["displayName"] if "description" in json_data: description = json_data["description"] from octoprint.server.api import valid_boolean_trues if "default" in json_data and json_data["default"] in valid_boolean_trues: default_profiles = s().get(["slicing", "defaultProfiles"]) if not default_profiles: default_profiles = dict() default_profiles[slicer] = name s().set(["slicing", "defaultProfiles"], default_profiles) s().save(force=True) slicingManager.save_profile(slicer, name, profile, overrides=data, display_name=display_name, description=description) return NO_CONTENT
def slicingAddSlicerProfile(slicer, name): if not "application/json" in request.headers["Content-Type"]: return make_response("Expected content-type JSON", 400) try: json_data = request.json except BadRequest: return make_response("Malformed JSON body in request", 400) data = dict() display_name = None description = None if "data" in json_data: data = json_data["data"] if "displayName" in json_data: display_name = json_data["displayName"] if "description" in json_data: description = json_data["description"] try: profile = slicingManager.save_profile(slicer, name, data, allow_overwrite=True, display_name=display_name, description=description) except UnknownSlicer: return make_response("Unknown slicer {slicer}".format(**locals()), 404) result = _getSlicingProfileData(slicer, name, profile) r = make_response(jsonify(result), 201) r.headers["Location"] = result["resource"] return r
def slicingAddSlicerProfile(slicer, name): if not slicer in slicingManager.registered_slicers: return make_response("Unknown slicer {slicer}".format(**locals()), 404) if not "application/json" in request.headers["Content-Type"]: return None, None, make_response("Expected content-type JSON", 400) json_data = request.json data = dict() display_name = None description = None if "data" in json_data: data = json_data["data"] if "displayName" in json_data: display_name = json_data["displayName"] if "description" in json_data: description = json_data["description"] profile = slicingManager.save_profile(slicer, name, data, display_name=display_name, description=description) result = _getSlicingProfileData(slicer, name, profile) r = make_response(jsonify(result), 201) r.headers["Location"] = result["resource"] return r
def slicingAddSlicerProfile(slicer, name): if "application/json" not in request.headers["Content-Type"]: abort(400, description="Expected content-type JSON") json_data = request.get_json() if json_data is None: abort(400, description="Malformed JSON body in request") data = {} display_name = None description = None if "data" in json_data: data = json_data["data"] if "displayName" in json_data: display_name = json_data["displayName"] if "description" in json_data: description = json_data["description"] try: profile = slicingManager.save_profile( slicer, name, data, allow_overwrite=True, display_name=display_name, description=description, ) except UnknownSlicer: abort(404, description="Unknown slicer") result = _getSlicingProfileData(slicer, name, profile) r = make_response(jsonify(result), 201) r.headers["Location"] = result["resource"] return r
def slicingPatchSlicerProfile(slicer, name): if "application/json" not in request.headers["Content-Type"]: return make_response("Expected content-type JSON", 400) try: profile = slicingManager.load_profile(slicer, name, require_configured=False) except UnknownSlicer: return make_response("Unknown slicer {slicer}".format(**locals()), 404) except UnknownProfile: return make_response( "Profile {name} for slicer {slicer} not found".format(**locals()), 404) try: json_data = request.get_json() except BadRequest: return make_response("Malformed JSON body in request", 400) if json_data is None: return make_response("Malformed JSON body in request", 400) data = {} display_name = None description = None if "data" in json_data: data = json_data["data"] if "displayName" in json_data: display_name = json_data["displayName"] if "description" in json_data: description = json_data["description"] saved_profile = slicingManager.save_profile( slicer, name, profile, allow_overwrite=True, overrides=data, display_name=display_name, description=description, ) from octoprint.server.api import valid_boolean_trues if "default" in json_data and json_data["default"] in valid_boolean_trues: slicingManager.set_default_profile(slicer, name, require_exists=False) return jsonify(_getSlicingProfileData(slicer, name, saved_profile))
def slicingPatchSlicerProfile(slicer, name): if not "application/json" in request.headers["Content-Type"]: return make_response("Expected content-type JSON", 400) try: profile = slicingManager.load_profile(slicer, name) except UnknownSlicer: return make_response("Unknown slicer {slicer}".format(**locals()), 404) except UnknownProfile: return make_response( "Profile {name} for slicer {slicer} not found".format(**locals()), 404) try: json_data = request.json except JSONBadRequest: return make_response("Malformed JSON body in request", 400) data = dict() display_name = None description = None if "data" in json_data: data = json_data["data"] if "displayName" in json_data: display_name = json_data["displayName"] if "description" in json_data: description = json_data["description"] from octoprint.server.api import valid_boolean_trues if "default" in json_data and json_data["default"] in valid_boolean_trues: default_profiles = s().get(["slicing", "defaultProfiles"]) if not default_profiles: default_profiles = dict() default_profiles[slicer] = name s().set(["slicing", "defaultProfiles"], default_profiles) s().save(force=True) saved_profile = slicingManager.save_profile(slicer, name, profile, allow_overwrite=True, overrides=data, display_name=display_name, description=description) return jsonify(_getSlicingProfileData(slicer, name, saved_profile))
def slicingPatchSlicerProfile(slicer, name): if not "application/json" in request.headers["Content-Type"]: return make_response("Expected content-type JSON", 400) try: profile = slicingManager.load_profile(slicer, name, require_configured=False) except UnknownSlicer: return make_response("Unknown slicer {slicer}".format(**locals()), 404) except UnknownProfile: return make_response("Profile {name} for slicer {slicer} not found".format(**locals()), 404) try: json_data = request.json except BadRequest: return make_response("Malformed JSON body in request", 400) data = dict() display_name = None description = None if "data" in json_data: data = json_data["data"] if "displayName" in json_data: display_name = json_data["displayName"] if "description" in json_data: description = json_data["description"] from octoprint.server.api import valid_boolean_trues if "default" in json_data and json_data["default"] in valid_boolean_trues: default_profiles = s().get(["slicing", "defaultProfiles"]) if not default_profiles: default_profiles = dict() default_profiles[slicer] = name s().set(["slicing", "defaultProfiles"], default_profiles) s().save(force=True) saved_profile = slicingManager.save_profile(slicer, name, profile, allow_overwrite=True, overrides=data, display_name=display_name, description=description) return jsonify(_getSlicingProfileData(slicer, name, saved_profile))
def import_cura_profile(self): import datetime import tempfile from octoprint.server import slicingManager 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 = Profile.from_cura_ini( flask.request.values[input_upload_path]) except Exception as e: self._logger.exception( "Error while converting the imported profile") return flask.make_response( "Something went wrong while converting imported profile: {message}" .format(message=str(e)), 500) else: self._logger.warn( "No profile file included for importing, aborting") return flask.make_response("No file included", 400) if profile_dict is None: self._logger.warn("Could not convert profile, aborting") 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.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 try: slicingManager.save_profile( "cura", profile_name, profile_dict, allow_overwrite=profile_allow_overwrite, display_name=profile_display_name, description=profile_description) except octoprint.slicing.ProfileAlreadyExists: self._logger.warn( "Profile {profile_name} already exists, aborting".format( **locals())) return flask.make_response( "A profile named {profile_name} already exists for slicer cura" .format(**locals()), 409) 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
def importSvgToGcodeProfile(): 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_svgtogcode_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_svgtogcode_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("svgtogcode", 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="svgtogcode", 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
def import_cura_profile(self): import datetime import tempfile from octoprint.server import slicingManager 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 = Profile.from_cura_ini(flask.request.values[input_upload_path]) except Exception as e: self._logger.exception("Error while converting the imported profile") return flask.make_response( "Something went wrong while converting imported profile: {message}".format(message=str(e)), 500 ) else: self._logger.warn("No profile file included for importing, aborting") return flask.make_response("No file included", 400) if profile_dict is None: self._logger.warn("Could not convert profile, aborting") 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.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 try: slicingManager.save_profile( "cura", profile_name, profile_dict, allow_overwrite=profile_allow_overwrite, display_name=profile_display_name, description=profile_description, ) except octoprint.slicing.ProfileAlreadyExists: self._logger.warn("Profile {profile_name} already exists, aborting".format(**locals())) return flask.make_response( "A profile named {profile_name} already exists for slicer cura".format(**locals()), 409 ) 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
def importMattersliceProfile(): 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, imported_name, imported_description = Profile.from_matterslice_ini(flask.request.values[input_upload_path]) except Exception as e: return flask.make_response("Something went wrong while converting imported profile: {0}".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_matterslice_ini(temp_file.name) except Exception as e: return flask.make_response("Something went wrong while converting imported profile: {0}".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.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("matterslice", 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="matterslice", 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