diff --git a/.versioneer-lookup b/.versioneer-lookup index 0ffcdd87..86ee131b 100644 --- a/.versioneer-lookup +++ b/.versioneer-lookup @@ -10,13 +10,14 @@ # master shall not use the lookup table, only tags master -# maintenance is currently the branch for preparation of maintenance release 1.2.8 -# so are any fix/... branches -maintenance 1.2.8 6c622f7c4332b71c6ece59552ffc87c146155c84 pep440-dev -fix/.* 1.2.8 6c622f7c4332b71c6ece59552ffc87c146155c84 pep440-dev - -# Special case disconnected checkouts, e.g. 'git checkout ' +# neither should disconnected checkouts, e.g. 'git checkout ' +HEAD \(detached.* +# maintenance is currently the branch for preparation of maintenance release 1.2.9 +# so are any fix/... branches +maintenance 1.2.9 dedadbc9ac0305799e94ae279d3bca131629c4c5 pep440-dev +fix/.* 1.2.9 dedadbc9ac0305799e94ae279d3bca131629c4c5 pep440-dev + # every other branch is a development branch and thus gets resolved to 1.3.0-dev for now .* 1.3.0 198d3450d94be1a2 pep440-dev diff --git a/AUTHORS.md b/AUTHORS.md index 3cd1754d..f49bfae9 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -53,7 +53,9 @@ date of first contribution): * [Andrew Erickson](https://github.com/aerickson) * [Nicanor Romero Venier](https://github.com/nicanor-romero) * [Thomas Hou](https://github.com/masterhou) + * [Mark Bastiaans](https://github.com/markbastiaans) * [Kevin Murphy](https://github.com/kevingelion) + * [Richard Joyce](https://github.com/richjoyce) OctoPrint started off as a fork of [Cura](https://github.com/daid/Cura) by [Daid Braam](https://github.com/daid). Parts of its communication layer and diff --git a/CHANGELOG.md b/CHANGELOG.md index be40008f..a07b2b19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,128 @@ # OctoPrint Changelog +## 1.2.8 (2015-12-07) + +### Notes for Upgraders + +#### A bug in 1.2.7 prevents directly updating to 1.2.8, here's what to do + +A bug in OctoPrint 1.2.7 (fixed in 1.2.8) prevents updating OctoPrint to version +1.2.8. If you try to perform the update, you will simply be told that "the update +was successful", but the update won't actually have taken place. To solve this +hen-egg-problem, a plugin has been made available that fixes said bug (through +monkey patching). + +The plugin is called "Updatefix 1.2.7" and can be found +[in the plugin repository](http://plugins.octoprint.org/plugins/updatefix127/) +and [on Github](https://github.com/OctoPrint/OctoPrint-Updatefix-1.2.7/). + +Before attempting to update your installation from version 1.2.7 to version 1.2.8, +please install the plugin via your plugin manager and restart your server. Note that +you will only see it in the Plugin Manager if you need it, since it's only compatible with +OctoPrint version 1.2.7. After you installed the plugin and restarted your server +you can update as usual. The plugin will self-uninstall once it detects that it's +running under OctoPrint 1.2.8. After the self-uninstall another restart of your server +will be triggered (if you have setup your server's restart command, defaults to +`sudo service octoprint restart` on OctoPi) in order to really get rid of any +left-overs, so don't be alarmed when that happens, it is intentional. + +**If you cannot or don't want to use the plugin**, alternatively you can switch +OctoPrint to "Commit" based tracking via the settings of the Software Update plugin, +update, then switch back to "Release" based tracking (see [this screenshot](https://i.imgur.com/wvkgiGJ.png)). + +#### Bed temperatures are now only displayed if printer profile has a heated bed configured + +This release fixes a [bug](https://github.com/foosel/OctoPrint/issues/1125) +that caused bed temperature display and controls to be available even if the +selected printer profile didn't have a heated bed configured. + +If your printer does have a heated bed but you are not seeing its temperature +in the "Temperature" tab after updating to 1.2.8, please make sure to check +the "Heated Bed" option in your printer profile (under Settings > Printer Profiles) +as shown [in this short GIF](http://i.imgur.com/wp1j9bs.gif). + +### Improvements + + * Version numbering now follows [PEP440](https://www.python.org/dev/peps/pep-0440/). + * Prepared some things for publishing OctoPrint on [PyPi](https://pypi.python.org/pypi) + in the future. + * [BlueprintPlugin mixin](http://docs.octoprint.org/en/master/plugins/mixins.html#blueprintplugin) + now has an `errorhandler` decorator that serves the same purpose as + [Flask's](http://flask.pocoo.org/docs/0.10/patterns/errorpages/#error-handlers) + ([#1059](https://github.com/foosel/OctoPrint/pull/1059)) + * Interpret `M25` in a GCODE file that is being streamed from OctoPrint as + indication to pause, like `M0` and `M1`. + * Cache rendered page and translation files indefinitely. That should + significantly improve performance on reloads of the web interface. + * Added the string "unknown command" to the list of ignored printer errors. + This should help with general firmware compatibility in case a firmware + lacks features. + * Added the strings "cannot open" and "cannot enter" to the list of ignored + printer errors. Those are errors that Marlin may report if there is an issue + with the printer's SD card. + * The "CuraEngine" plugin now makes it more obvious that it only targets + CuraEngine versions up to and including 15.04 and also links to the plugin's + homepage with more information right within the settings dialog. + * Browser tab visibility is now tracked by the web interface, disabling the + webcam and the GCODE viewer if the tab containing OctoPrint is not active. + That should reduce the amount of resource utilized by the web interface on + the client when it is not actively monitored. Might also help to mitigate + [#1065](https://github.com/foosel/OctoPrint/issues/1065), the final verdict + on that one is still out though. + * The printer log in the terminal tab will now be cut off after 3000 lines + even if autoscroll is disabled. If the limit is reached, no more log lines + will be added to the client's buffer. That ensures that the log will not + scroll and the current log excerpt will stay put while also not causing + the browser to run into memory errors due to trying to buffer an endless + amount of log lines. + * Increased timeout of "waiting for restart" after an update from 20 to 60sec + (20sec turned out to be too little for OctoPi for whatever reason). + * Added a couple of unit tests + +### Bug Fixes + + * [#1120](https://github.com/foosel/OctoPrint/issues/1120) - Made the watchdog + that monitors and handles the `watched` folder more resilient towards errors. + * [#1125](https://github.com/foosel/OctoPrint/issues/1125) - Fixed OctoPrint + displaying bed temperature and controls and allowing the sending of GCODE + commands targeting the bed (`M140`, `M190`) if the printer profile doesn't + have a heated bed configured. + * Fixed an issue that stopped the software updater working for OctoPrint. The + updater reports success updating, but no update has actually taken place. A + fix can be applied for this issue to OctoPrint version 1.2.7 via + [the Updatefix 1.2.7 plugin](https://github.com/OctoPrint/OctoPrint-Updatefix-1.2.7). + For more information please refer to the [Important information for people updating from version 1.2.7](#important-information-for-people-updating-from-version-127) + above. + * Fix: Current filename in job data should never be prefixed with `/` + * Only persist plugin settings that differ from the defaults. This way the + `config.yaml` won't be filled with lots of redundant data. It's the + responsibility of the plugin authors to responsibly handle changes in default + settings of their plugins and add data migration where necessary. + * Fixed a documentation bug ([#1067](https://github.com/foosel/OctoPrint/pull/1067)) + * Fixed a conflict with bootstrap-responsive, e.g. when using the + [ScreenSquish Plugin](http://plugins.octoprint.org/plugins/screensquish/) + ([#1103](https://github.com/foosel/OctoPrint/pull/1067)) + * Fixed OctoPrint still sending SD card related commands to the printer even + if SD card support is disabled (e.g. `M21`). + * Hidden files are no longer visible to the template engine, neither as (GCODE) + scripts nor as interface templates. + * The hostname and URL prefix via which the OctoPrint web interface is accessed + is now part of the cache key. Without that being the case the cache could + be created referring to something like `/octoprint/prefix/api/` for its API + endpoint (if accessed via `http://somehost:someport/octoprint/prefix/` first + time), which would then cause the interface to not work if accessed later + via another route (e.g. `http://someotherhost/`). + * Fixed a JavaScript error on finishing streaming of a file to SD. + * Fixed version reporting on detached HEADs (when the branch detection + reported "HEAD" instead of "(detached" + * Fixed some path checks for systems with symlinked paths + ([#1051](https://github.com/foosel/OctoPrint/pull/1051)) + * Fixed a bug causing the "Server Offline" overlay to pop _under_ the + "Please reload" overlay, which could lead to "Connection refused" browser + messages when clicking "Reload now" in the wrong moment. + +([Commits](https://github.com/foosel/OctoPrint/compare/1.2.7...1.2.8)) + ## 1.2.7 (2015-10-20) ### Improvements @@ -386,7 +509,7 @@ changed under "Temperatures" in the Settings ([#343](https://github.com/foosel/OctoPrint/issues/343)). * High-DPI support for the GCode viewer ([#837](https://github.com/foosel/OctoPrint/issues/837)). * Stop websocket connections from multiplying ([#888](https://github.com/foosel/OctoPrint/pull/888)). -* New setting to rotate webcam by 90° counter clockwise ([#895](https://github.com/foosel/OctoPrint/issues/895) and +* New setting to rotate webcam by 90° counter clockwise ([#895](https://github.com/foosel/OctoPrint/issues/895) and [#906](https://github.com/foosel/OctoPrint/pull/906)) * System commands now be set to a) run asynchronized by setting their `async` property to `true` and b) to ignore their result by setting their `ignore` property to `true`. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 24bc3890..68c09bcb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,51 +1,264 @@ -Issues, Tickets, however you may call them ------------------------------------------- +# Contribution Guidelines -Read the following short instructions **fully** and **follow them** if you want your ticket to be taken care of and not closed again directly! They are linked on top of every new issue form, so don't say nobody warned you afterwards. +This document outlines what you need to know before **[creating tickets](#issues-tickets-however-you-may-call-them)** +or **[creating pull requests](#pull-requests)**. -- **Read the [FAQ](https://github.com/foosel/OctoPrint/wiki/FAQ)** -- Always create **one ticket for one purpose**. So don't mix two or more feature requests, support requests, bugs etc into one ticket. If you do, your ticket will be closed! -- If you want to report a bug, **READ AND FOLLOW [How to file a bug report](https://github.com/foosel/OctoPrint/wiki/How-to-file-a-bug-report)!** Tickets will be automatically checked if they comply with the requirements outlined in that wiki node! Other then what's written in there (**and really EVERYTHING that is written in there!**) you don't have to do anything special with your ticket. Listen to what GitIssueBot might have to say to you! -- If you want to post a **request** of any kind (feature request, documentation request, ...), **add [Request] to your issue's title!** -- If you need **support** with a problem of your installation (e.g. if you have problems getting the webcam to work) or have a general **question**, the issue tracker is not the right place. Consult the [Mailinglist](https://groups.google.com/group/octoprint) or the [Google+ Community](https://plus.google.com/communities/102771308349328485741) instead! -- If you are a developer that wants to brainstorm a pull request or possible changes to the plugin system, **add [Brainstorming] to your issue's title!** (see below). -- If you have another reason for creating a ticket that doesn't fit any of the above categories, it's something better suited for the [Mailinglist](https://groups.google.com/group/octoprint) or the [Google+ Community](https://plus.google.com/communities/102771308349328485741). +## Contents -Following these guidelines (**especially EVERYTHING mentioned in ["How to file a bug report"](https://github.com/foosel/OctoPrint/wiki/How-to-file-a-bug-report)**) is necessary so the tickets stay manageable - you are not the only one with an open issue, so please respect that you have to **play by the rules** so that your problem can be taken care of. Tickets not playing by the rules **will be closed without further investigation!**. + * [Issues, Tickets, however you may call them](#issues-tickets-however-you-may-call-them) + * [How to file a bug report](#how-to-file-a-bug-report) + * [What should I do before submitting a bug report?](#what-should-i-do-before-submitting-a-bug-report) + * [What should I include in a bug report?](#what-should-i-include-in-a-bug-report) + * [Where can I find which version and branch I'm on?](#where-can-i-find-which-version-and-branch-im-on) + * [Where can I find those log files you keep talking about?](#where-can-i-find-those-log-files-you-keep-talking-about) + * [Where can I find my browser's error console?](#where-can-i-find-my-browsers-error-console) + * [Pull requests](#pull-requests) + * [History](#history) + * [Footnotes](#footnotes) -Pull Requests -------------- +## Issues, Tickets, however you may call them -1. If you want to add a new feature to OctoPrint, **please always first consider if it wouldn't be better suited for a - plugin.** As a general rule of thumb, any feature that is only of interest to a small sub group should be moved into a - plugin. If the current plugin system doesn't allow you to implement your feature as a plugin, create a "Brainstorming" - ticket to get the discussion going how best to solve *this* in OctoPrint's plugin system - maybe that's the actual PR - you have been waiting for to contribute :) -2. If you plan to make **any large changes to the code or appearance, please open a "Brainstorming" ticket first** so that - we can determine if it's a good time for your specific pull request. It might be that I'm currently in the process of - making heavy changes to the code locations you'd target as well, or your approach doesn't fit the general "project - vision", and that would just cause unnecessary work and frustration for everyone or possibly get the PR rejected. -3. When adding code to OctoPrint, make sure you **follow the current coding style**. That means tabs instead of spaces in the - python files (yes, I know that this goes against PEP-8, I don't care) and space instead of tabs in the Javascript sources, - english language (that means code, variables, comments!), comments where necessary (tell why the code does something like - it does it, structure your code), following the general architecture. If your PR needs to make changes to the Stylesheets, - change the ``.less`` files from which the CSS is compiled. PRs that contain direct changes to the compiled - CSS will be closed. -4. **Test your changes thoroughly**. That also means testing with usage scenarios you don't normally use, e.g. if you only - use access control, test without and vice versa. If you only test with your printer, test with the virtual printer and - vice versa. State in your pull request how your tested your changes. -5. Please create all pull requests **against the `devel` branch**. -6. Create **one pull request per feature/bug fix**. -7. Create a **custom branch** for your feature/bug fix and use that as base for your pull request. Pull requests directly - against your version of `devel` will be closed. -8. In your pull request's description, **state what your pull request is doing**, as in, what feature does it implement, what - bug does it fix. The more thoroughly you explain your intent behind the PR here, the higher the chances it will get merged - fast. -9. Don't forget to **add yourself to the [AUTHORS](../AUTHORS.md) file** :) +Please read the following short instructions fully and follow them. You can +help the project tremendously this way: not only do you help the maintainers +to **address problems in a timely manner** but also keep it possible for them +to **fix bugs, add new and improve on existing functionality** instead of doing +nothing but ticket management. -History -------- +![Ticket flow chart](http://i.imgur.com/qYSZyuw.png) - * 2015-01-23: More guidelines for creating pull requests, support/questions redirected to Mailinglist/G+ community +- **[Read the FAQ](https://github.com/foosel/OctoPrint/wiki/FAQ)** +- If you want to report a **bug**, [read "How to file a bug report" below](#how-to-file-a-bug-report) + and *[use the provided template](#what-should-i-include-in-a-ticket)*. + You do not need to do anything else with your ticket. +- If you want to post a **request** of any kind (feature request, documentation + request, ...), add `[Request]` to your issue's title (e.g. `[Request] Awesome new feature`). +- If you are a **developer** that wants to brainstorm a pull request or possible + changes to the plugin system, add [Brainstorming] to your issue's title (e.g. + `[Brainstorming] New plugin hook for doing some cool stuff`). +- If you need **support**, have a **question** or some **other reason** that + doesn't fit any of the above categories, the issue tracker is not the right place. + Consult the [Mailinglist](https://groups.google.com/group/octoprint) or the + [Google+ Community](https://plus.google.com/communities/102771308349328485741) instead. + +No matter what kind of ticket you create, never mix two or more "ticket reasons" +into one ticket: One ticket per bug, request, brainstorming thread please. + +---- + +**Note**: A bot is in place that monitors new tickets, automatically +categorizes them and checks new bug reports for usage of the provided template. +That bot will only bother you if you open a ticket that appears to be a bug (no +`[Request]` or `[Brainstorming]` in the title) without the template, and it +will do that only to ensure that all information needed to solve the issue is +available for the maintainers to directly start tackling that problem. + +---- + +## How to file a bug report + +If you encounter an issue with OctoPrint, you are welcome to +[submit a bug report](https://goo.gl/GzkGv9). + +Before you do that for the first time though please take a moment to read the +following section *completely*. Thank you! :) + +### What should I do before submitting a bug report? + +1. **Make sure you are at the right location**. This is the Github repository + of the official version of OctoPrint, which is the 3D print server and + corresponding web interface itself. + + **This is not the Github respository of OctoPi**, which is the preconfigured + Raspberry Pi image including OctoPrint among other things - that one can be found + [here](https://github.com/guysoft/OctoPi). Please note that while we do have + some entries regarding OctoPi in the FAQ, any bugs should be reported in the + [proper bug tracker](https://github.com/guysoft/OctoPi/issues) which - again - + is not here. + + **This is also not the Github repository of any OctoPrint Plugins you + might have installed**. Report any issues with those in their corresponding + bug tracker (probably linked to from the plugin's homepage). + + Finally, **this is also not the right issue tracker if you are running an + forked version of OctoPrint**. Seek help for such unofficial versions from + the people maintaining them instead. + +2. Please make sure to **test out the current version** of OctoPrint to see + whether the problem you are encountering still exists. + + If you are feeling up to it you might also want to try the current development + version of OctoPrint (if you aren't already). Refer to the [FAQ](https://github.com/foosel/OctoPrint/wiki/FAQ) + for information on how to do this. + +3. The problem still exists? Then please **look through the + [existing tickets](https://github.com/foosel/OctoPrint/issues?state=open) + (use the [search](https://github.com/foosel/OctoPrint/search?q=&ref=cmdform&type=Issues))** + to check if there already exists a report of the issue you are encountering. + Sorting through duplicates of the same issue sometimes causes more work than + fixing it. Take the time to filter through possible duplicates and be really + sure that your problem definitely is a new one. Try more than one search query + (e.g. do not only search for "webcam" if you happen to run into an issue + with your webcam, also search for "timelapse" etc). + +### What should I include in a bug report? + +Always use the following template (you can remove what's within `[...]`, that's +only provided here as some additional information for you): + + #### What were you doing? + + [Please be as specific as possible here. The maintainers will need to reproduce + your issue in order to fix it and that is not possible if they don't know + what you did to get it to happen in the first place. If you encountered + a problem with specific files of any sorts, make sure to also include a link to a file + with which to reproduce the problem.] + + #### What did you expect to happen? + + #### What happened instead? + + #### Branch & Commit or Version of OctoPrint + + [Can be found in the lower left corner of the web interface.] + + #### Printer model & used firmware incl. version + + [If applicable, always include if unsure.] + + #### Browser and Version of Browser, Operating System running Browser + + [If applicable, always include if unsure.] + + #### Link to octoprint.log + + [On gist.github.com or pastebin.com. Always include and never truncate.] + + #### Link to contents of terminal tab or serial.log + + [On gist.github.com or pastebin.com. If applicable, always include if unsure or + reporting communication issues. Never truncate.] + + #### Link to contents of Javascript console in the browser + + [On gist.github.com or pastebin.com or alternatively a screenshot. If applicable - + always include if unsure or reporting UI issues.] + + #### Screenshot(s) showing the problem: + + [If applicable. Always include if unsure or reporting UI issues.] + + I have read the FAQ. + +### Where can I find which version and branch I'm on? + +You can find out all of them by taking a look into the lower left corner of the +OctoPrint UI: + +![Current version and git branch info in OctoPrint's UI](http://i.imgur.com/HyHMlY2.png) + +If you don't have access to the UI you can find out that information via the +command line as well. Either `octoprint --version` or `python setup.py version` +in OctoPrint's folder will tell you the version of OctoPrint you are running +(note: if it doesn't then you are running a version older than 1.1.0, +*upgrade now*). A `git branch` in your OctoPrint installation folder will mark +the branch you are on with a little *. `git rev-parse HEAD` will tell you the +current commit. + +### Where can I find those log files you keep talking about? + +OctoPrint by default provides two log outputs, a third one can be enabled if +more information is needed. + +One is contained in the **"Terminal" tab** within OctoPrint's UI and is a log +of the last 300 lines of communication with the printer. Please copy-paste +this somewhere (disable auto scroll to make copying the contents easier) - +e.g. http://pastebin.com or http://gist.github.com - and include a link in +your bug report. + +There is also **OctoPrint's application log file** or in short `octoprint.log`, +which is by default located at `~/.octoprint/logs/octoprint.log` on Linux, +`%APPDATA%\OctoPrint\logs\octoprint.log` on Windows and +`~/Library/Application Support/OctoPrint/logs/octoprint.log` on MacOS. Please +copy-paste this to pastebin or gist as well and include a link in your bug +report. + +It might happen that you are asked to provide a more **thorough log of the +communication with the printer** if you haven't already done so, the `serial.log`. +This is not written by default due to performance reasons, but you can enable +it in the settings dialog. After enabling that log, please reproduce the problem +again (connect to the printer, do whatever triggers it), then copy-paste +`~/.octoprint/logs/serial.log` (Windows: `%APPDATA%\OctoPrint\logs\serial.log`, +MacOS: `~/Library/Application Support/OctoPrint/logs/serial.log`) to pastebin +or gist and include the link in the bug report. + +You might also be asked to provide a log with an increased log level. You can +find information on how to do just that in the +[docs](http://docs.octoprint.org/en/master/configuration/logging_yaml.html). + +### Where can I find my browser's error console? + +See [How to open the Javascript Console in different browsers](https://webmasters.stackexchange.com/questions/8525/how-to-open-the-javascript-console-in-different-browsers) + +## Pull requests + +1. If you want to add a new feature to OctoPrint, **please always first + consider if it wouldn't be better suited for a plugin.** As a general rule + of thumb, any feature that is only of interest to a small sub group should + be moved into a plugin. If the current plugin system doesn't allow you to + implement your feature as a plugin, create a "Brainstorming" ticket to get + the discussion going on how best to solve *this* in OctoPrint's plugin + system - maybe that's the actual PR you have been waiting for to contribute :) +2. If you plan to make **any large changes to the code or appearance, please + open a "Brainstorming" ticket first** so that we can determine if it's a + good time for your specific pull request. It might be that we're currently + in the process of making heavy changes to the code locations you'd target + as well, or your approach doesn't fit the general "project vision", and + that would just cause unnecessary work and frustration for everyone or + possibly get the PR rejected. +3. Create your pull request **from a custom branch** on your end (e.g. + `dev/myNewFeature`)[1] **against the `devel` branch**. Create **one pull request + per feature/bug fix**. If your PR contains an important bug fix, we will + make sure to backport it to the `maintenance` branch to also include it in + the next release. +4. Make sure you **follow the current coding style**. This means: + * Tabs instead of spaces in the Python files[2] + * Spaces instead of tabs in the Javascript sources + * English language (code, variables, comments, ...) + * Comments where necessary: Tell why the code does something like it does + it, structure your code + * Following the general architecture + If your PR needs to make changes to the Stylesheets, change the ``.less`` files + from which the CSS is compiled. +5. **Test your changes thoroughly**. That also means testing with usage + scenarios you don't normally use, e.g. if you only use access control, test + without and vice versa. If you only test with your printer, test with the + virtual printer and vice versa. State in your pull request how your tested + your changes. Ideally **add unit tests** - OctoPrint severly lacks in that + department, but we are trying to change that, so any new code already covered + with a test suite helps a lot! +6. In your pull request's description, **state what your pull request is doing**, + as in, what feature does it implement, what bug does it fix. The more + thoroughly you explain your intent behind the PR here, the higher the + chances it will get merged fast. +7. Important: Don't forget to **add yourself to the [AUTHORS](./AUTHORS.md) + file** :) + +## History + + * 2015-01-23: More guidelines for creating pull requests, support/questions + redirected to Mailinglist/G+ community * 2015-01-27: Added another explicit link to the FAQ * 2015-07-07: Added step to add yourself to AUTHORS when creating a PR :) + * 2015-12-01: Heavily reworked to include examples, better structure and + all information in one document. + +## Footnotes + * [1] - If you are wondering why, the problem is that anything that you add + to your PR's branch will also become part of your PR, so if you create a + PR from your version of `devel` chances are high you'll add changes to the + PR that do not belong to the PR. + * [2] - Yes, we know that this goes against PEP-8. OctoPrint started out as + a fork of Cura and hence stuck to the coding style found therein. Changing + it now would make the history and especially `git blame` completely + unusable, so for now we'll have to deal with it (this decision might be + revisited in the future). diff --git a/README.md b/README.md index 4d5a9ba0..ccb813ce 100644 --- a/README.md +++ b/README.md @@ -47,11 +47,11 @@ which is a custom SD card image that includes OctoPrint plus dependencies. The generic steps that should basically be done regardless of operating system and runtime environment are the following (as *regular user*, please keep your hands *off* of the `sudo` command here!) - this assumes -you already have Python 2.7, pip and virtualenv set up: +you already have Python 2.7, pip and virtualenv set up on your system: 1. Checkout OctoPrint: `git clone https://github.com/foosel/OctoPrint.git` 2. Change into the OctoPrint folder: `cd OctoPrint` -3. Create a user-owned virtual environment therein: `virtualenv --system-site-packages venv` +3. Create a user-owned virtual environment therein: `virtualenv venv` 4. Install OctoPrint *into that virtual environment*: `./venv/bin/python setup.py install` You may then start the OctoPrint server via `/path/to/OctoPrint/venv/bin/octoprint`, see [Usage](#usage) diff --git a/docs/api/printer.rst b/docs/api/printer.rst index 48072249..1184965f 100644 --- a/docs/api/printer.rst +++ b/docs/api/printer.rst @@ -25,7 +25,8 @@ Tool See :ref:`sec-api-printer-toolcommand`. Bed Bed commands allow setting the temperature and temperature offset for the printer's heated bed. Querying the - corresponding resource returns temperature information including an optional history. + corresponding resource returns temperature information including an optional history. Note that Bed commands + are only available if the currently selected printer profile has a heated bed. See :ref:`sec-api-printer-bedcommand`. SD card SD commands allow initialization, refresh and release of the printer's SD card (if available). Querying the @@ -564,6 +565,9 @@ Issue a bed command Upon success, a status code of :http:statuscode:`204` and an empty body is returned. + If no heated bed is configured for the currently selected printer profile, the resource will return + an :http:statuscode:`409`. + **Example Target Temperature Request** Set the target temperature for the printer's heated bed to 75°C. @@ -610,7 +614,8 @@ Issue a bed command :statuscode 204: No error :statuscode 400: If ``target`` or ``offset`` is not a valid number or outside of the supported range, or if the request is otherwise invalid. - :statuscode 409: If the printer is not operational. + :statuscode 409: If the printer is not operational or the selected printer profile + does not have a heated bed. .. _sec-api-printer-bedstate: @@ -627,6 +632,9 @@ Retrieve the current bed state Returns a :http:statuscode:`200` with a Temperature Response in the body upon success. + If no heated bed is configured for the currently selected printer profile, the resource will return + an :http:statuscode:`409`. + .. note:: If you want both tool and bed temperature information at the same time, take a look at :ref:`Retrieve the current printer state `. @@ -675,7 +683,8 @@ Retrieve the current bed state :query limit: If set to an integer (``n``), only the last ``n`` data points from the printer's temperature history will be returned. Will be ignored if ``history`` is not enabled. :statuscode 200: No error - :statuscode 409: If the printer is not operational. + :statuscode 409: If the printer is not operational or the selected printer profile + does not have a heated bed. .. _sec-api-printer-sdcommand: @@ -856,7 +865,7 @@ Send an arbitrary command to the printer .. sourcecode:: http HTTP/1.1 204 No Content - + :json string command: Single command to send to the printer, mutually exclusive with ``commands``. :json string commands: List of commands to send to the printer, mutually exclusive with ``command``. :statuscode 204: No error @@ -913,7 +922,8 @@ Temperature State * - ``bed`` - 0..1 - :ref:`Temperature Data ` - - Current temperature stats for the printer's heated bed. Not included if querying only tool state. + - Current temperature stats for the printer's heated bed. Not included if querying only tool state or if + the currently selected printer profile does not have a heated bed. * - ``history`` - 0..1 - List of :ref:`Historic Temperature Datapoint ` diff --git a/docs/features/custom_controls.rst b/docs/features/custom_controls.rst index 983611fc..a953617e 100644 --- a/docs/features/custom_controls.rst +++ b/docs/features/custom_controls.rst @@ -65,7 +65,7 @@ a GCODE script including user input. children: - name: Get Position command: M114 - regex: "X:([0-9.]+) Y:([0-9.]+) Z:([0-9.]+) E:([0-9.]+)" + regex: "X:([-+]?[0-9.]+) Y:([-+]?[0-9.]+) Z:([-+]?[0-9.]+) E:([-+]?[0-9.]+)" template: "Position: X={0}, Y={1}, Z={2}, E={3}" - name: Fun stuff children: diff --git a/docs/features/gcode_scripts.rst b/docs/features/gcode_scripts.rst index 011e15c3..d1b5fde8 100644 --- a/docs/features/gcode_scripts.rst +++ b/docs/features/gcode_scripts.rst @@ -86,7 +86,7 @@ Out of the box, OctoPrint defaults to the following script setup for ``afterPrin ;disable all heaters {% snippet 'disable_hotends' %} - M140 S0 + [% snippet 'disable_bed' %} ;disable fan M106 S0 @@ -100,8 +100,19 @@ The ``disable_hotends`` snippet is defined as follows: M104 T{{ tool }} S0 {% endfor %} -As you can see, the ``disable_hotends`` snippet utilizes the ``printer_profile`` context variable in order to -iterate through all available extruders and set their temperature to 0. +The ``disable_bed`` snippet is defined as follows: + +.. code-block:: jinja + :caption: Default ``disable_bed`` snippet + + {% if printer_profile.heatedBed %} + M140 S0 + {% endif %} + +As you can see, the ``disable_hotends`` and ``disable_bed`` snippets utilize the +``printer_profile`` context variable in order to iterate through all available +extruders and set their temperature to 0, and to also set the bed temperature +to 0 if a heated bed is configured. .. seealso:: diff --git a/setup.py b/setup.py index 86b7837f..911a482a 100644 --- a/setup.py +++ b/setup.py @@ -32,7 +32,8 @@ INSTALL_REQUIRES = [ "pkginfo==1.2.1", "requests==2.7.0", "semantic_version==2.4.2", - "psutil==3.2.1" + "psutil==3.2.1", + "awesome-slugify>=1.6.5,<1.7" ] # Additional requirements for optional install options diff --git a/src/octoprint/filemanager/storage.py b/src/octoprint/filemanager/storage.py index 1fe59e35..bbbc51aa 100644 --- a/src/octoprint/filemanager/storage.py +++ b/src/octoprint/filemanager/storage.py @@ -13,6 +13,8 @@ import tempfile import octoprint.filemanager +from octoprint.util import is_hidden_path + class StorageInterface(object): """ Interface of storage adapters for OctoPrint. @@ -309,6 +311,10 @@ class LocalFileStorage(StorageInterface): self._metadata_cache = pylru.lrucache(10) + from slugify import Slugify + self._slugify = Slugify() + self._slugify.safe_chars = "-_.() " + self._old_metadata = None self._initialize_metadata() @@ -357,7 +363,7 @@ class LocalFileStorage(StorageInterface): if not metadata: metadata = dict() for entry in os.listdir(path): - if entry.startswith(".") or not octoprint.filemanager.valid_file_type(entry): + if is_hidden_path(entry) or not octoprint.filemanager.valid_file_type(entry): continue absolute_path = os.path.join(path, entry) @@ -607,9 +613,9 @@ class LocalFileStorage(StorageInterface): def sanitize_name(self, name): """ - Raises a :class:`ValueError` for a ``name`` containing ``/`` or ``\``. Otherwise strips any characters from the - given ``name`` that are not any of the ASCII characters, digits, ``-``, ``_``, ``.``, ``(``, ``)`` or space and - replaces and spaces with ``_``. + Raises a :class:`ValueError` for a ``name`` containing ``/`` or ``\``. Otherwise + slugifies the given ``name`` by converting it to ASCII, leaving ``-``, ``_``, ``.``, + ``(``, and ``)`` as is. """ if name is None: return None @@ -617,11 +623,7 @@ class LocalFileStorage(StorageInterface): if "/" in name or "\\" in name: raise ValueError("name must not contain / or \\") - import string - valid_chars = "-_.() {ascii}{digits}".format(ascii=string.ascii_letters, digits=string.digits) - sanitized_name = ''.join(c for c in name if c in valid_chars) - sanitized_name = sanitized_name.replace(" ", "_") - return sanitized_name + return self._slugify(name).replace(" ", "_") def sanitize_path(self, path): """ @@ -887,7 +889,7 @@ class LocalFileStorage(StorageInterface): result = dict() for entry in os.listdir(path): - if entry.startswith("."): + if is_hidden_path(entry): # no hidden files and folders continue diff --git a/src/octoprint/plugin/__init__.py b/src/octoprint/plugin/__init__.py index 0cc58715..4b747e09 100644 --- a/src/octoprint/plugin/__init__.py +++ b/src/octoprint/plugin/__init__.py @@ -330,7 +330,7 @@ class PluginSettings(object): set_int =("setInt", prefix_path_in_args, add_setter_kwargs), set_float =("setFloat", prefix_path_in_args, add_setter_kwargs), set_boolean=("setBoolean", prefix_path_in_args, add_setter_kwargs), - remove =("remove", prefix_path_in_args) + remove =("remove", prefix_path_in_args, lambda x: x) ) self.deprecated_access_methods = dict( getInt ="get_int", diff --git a/src/octoprint/plugins/cura/__init__.py b/src/octoprint/plugins/cura/__init__.py index fd326a10..095a274b 100644 --- a/src/octoprint/plugins/cura/__init__.py +++ b/src/octoprint/plugins/cura/__init__.py @@ -37,11 +37,10 @@ class CuraPlugin(octoprint.plugin.SlicerPlugin, ##~~ TemplatePlugin API - def get_template_configs(self): - from flask.ext.babel import gettext - return [ - dict(type="settings", name=gettext("CuraEngine")) - ] + def get_template_vars(self): + return dict( + homepage=__plugin_url__ + ) ##~~ StartupPlugin API @@ -413,9 +412,9 @@ def _sanitize_name(name): sanitized_name = sanitized_name.replace(" ", "_") return sanitized_name.lower() -__plugin_name__ = "CuraEngine" +__plugin_name__ = "CuraEngine (<= 15.04)" __plugin_author__ = "Gina Häußge" __plugin_url__ = "https://github.com/foosel/OctoPrint/wiki/Plugin:-Cura" -__plugin_description__ = "Adds support for slicing via CuraEngine from within OctoPrint" +__plugin_description__ = "Adds support for slicing via CuraEngine versions up to and including version 15.04 from within OctoPrint" __plugin_license__ = "AGPLv3" __plugin_implementation__ = CuraPlugin() diff --git a/src/octoprint/plugins/cura/templates/cura_settings.jinja2 b/src/octoprint/plugins/cura/templates/cura_settings.jinja2 index 6779f95c..92cfe0ae 100644 --- a/src/octoprint/plugins/cura/templates/cura_settings.jinja2 +++ b/src/octoprint/plugins/cura/templates/cura_settings.jinja2 @@ -1,5 +1,12 @@

{{ _('General') }}

+

{% trans %} + Specify the path to the CuraEngine binary. Note that only + versions up to and including 15.04 are supported. + CuraEngine version 15.06 or newer is not + compatible with this plugin. +{% endtrans %}

+
@@ -10,7 +17,7 @@
@@ -53,6 +60,10 @@ +
+ {% trans %}For more information on configuration and usage please see the Plugin's homepage.{% endtrans %} +
+ + + {% trans %} + You can import your existing profile .ini files from Cura (version up to and + including 15.04) here. Please be aware that neither the .json profile format + from Cura versions starting with 15.06 is supported, nor are the custom Cura profile formats + that third party tools like e.g. Repetier create. + {% endtrans %}