Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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))
Ejemplo n.º 9
0
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))
Ejemplo n.º 10
0
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))
Ejemplo n.º 11
0
    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
Ejemplo n.º 12
0
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
Ejemplo n.º 13
0
    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