Heads-up Plugin Authors: Python 2's EOL and Python 3
This release officially adds support to run OctoPrint under Python 3 instead of 2, which has become EOL as of January 1st 2020. However, most third party plugins probably do not yet support Python 3. In order to allow Plugin Authors to test and if necessary adjust their plugins first before OctoPrint tries to load them under Python 3, a new plugin property
__plugin_pythoncompat__ has been introduced. Plugins should define the compatibly Python version via this property which OctoPrint will check on load and only proceed with loading the plugin under Python 3 if it signals compatibility.
Additionally, the Plugin Repository has been expanded to include a new field
compatibility.python which signals Python compatibility on the listing as well so that OctoPrint's Plugin Manager will only show such plugins from the repository as installable under Python 3 which are configured as such.
Please see this guide in the documentation on how to go about compatibility testing and how to modify existing plugins to work with OctoPrint when running under Python 3.
By default, OctoPrint will assume compatibility to Python 2 only.
- #485 - Add a progress bar for timelapse rendering. Special thanks to @ZachNo! See also #2586.
- #1110 - Switch to a new granular permission system which allows fine control over permissions per user and newly introduced groups. That way you should be able to fully adjust OctoPrint to your permission needs. Special thanks to @Salandora! See also #2198.
- #2373 - Support to create timelapse recordings in H264 as as well as the legacy MPEG2. Special thanks to @koenkooi! See also #2410.
- #2722 - Make OctoPrint Python 3 compatible and thus future proof now that Python 2 is EOL and about to die for good. Special thanks to @ByReaL, @razerraz, @smurfix & @tedder! See also #1416, #2731, #2733, #2807, #2828, #2840, #2851, #2924, #2926, #2928, #2929, #2930, #2931, #2932, #2933, #2934, #2936, #2937, #2938, #3032
- #783 - New events
UserLoggedOut, on the push socket only available to admin users.
- #935 - Support alternative source file types in
- #1665 - Include
/dev/ttyS*in serial port pattern.
- #1703 - Clarify some source code comments.
- #1748 - Add
sameDevicefield to slicing API.
- #1854 - New plugin hooks
octoprint.timelapse.capture.[pre/post]to allow plugins to react to capturing happening.
- #2328 - Grammar fix.
- #3006 - Add options to allow gcode analysis, only when idle (default, former behaviour) or disable altogether. See also #3337.
- #3210 - Clarify documentation on when the
Errorevent will fire.
- #3212 - Mark serial port file handle as not inheritable in order to avoid issues with spawned sub processes keeping a lock on the port vs "exclusive" open mode.
- #3287 - Action Command Prompt: More flexibility for command definition for better compatibility with Klipper.
- #3288 - Plugin Manager: Make plugin list filterable by bundled/third party and enabled/disabled and add a search box..
- #3292 - Action Command Prompt: Support multi line option buttons.
- #3295 - SWU: Added support for
github_committracking configuration the the UI.
- #3299 - Plugin Manager: Option to remove the settings and data of a plugin during plugin uninstall, on click and also to clean up any left overs from by now uninstalled plugins in the settings and data folders.
- #3318 - Improve performance of the server side gcode interpreter.
- #3326 - Adjust the toolbar color on Android based on the selected navbar background color.
- #3342 - Prerender included markdown (AUTHORS.md, SUPPORTERS.md, THIRDPARTYLICENSES.md) and remove changelog (CHANGELOG.md) from About dialog, instead redirect to Github release page which has the full changelog.
- Strip the
ClientOpenedevents pushed via the websocket to guests.
- Loading animation to better communicate when the interface has actually successfully loaded and can be used. Can also be disabled via the settings.
- Improved logging in case of plugin syntax errors.
- Sanitized & reconfigured some HTTP headers:
X-Content-Type-Optionsis now set to
X-Frame-Optionsis not set to
sameoriginunless configured otherwise
JSESSIONIDcookie removed from SockJS
- Clarify use of printer profile fields.
- PMGR/SWU: Added flag to ignore the throttle state. Will allow people to circumvent the shoot-yourself-into-the-foot-countermeasures that prevent software updates & plugin installs while in a throttled state by editing
- SWU: Do not persist check providers across reboots.
- SWU: Add
pypi_releaseversion check type
- SWU: Option to
pipauto update right from within OctoPrint. Opt-in since
pipupdates can and have broken backwards compatibility in the past.
- Do not refresh site source on hard refresh if we are currently printing but print warning to log to use
_refreshif it's actually required. See also #3344 for further discussion.
- Various dependency updates. See also #1536.
- Various documentation fixes and improvements. See also #2804, #3305, #3233, #3325, #3328.
- Various typo fixes. See also #3297, #3330
- #3367 - Ensure that static CSS and JS files always get the correct MIME Type associated, to work around issues when installed under Windows 10 with invalid entries in the registry triggering strict MIME checking
- #3381 - Continue to support request parameters on the
/api/loginendpoint for now for backwards compatibility with API clients that still use things like
/api/login?passive=true, e.g. older versions of Printoid
- Remove a left-over comment from the Python 3 migration
- #3400 (UX of new functionality) - Add
ClientAuthedevent to allow plugins to react to a client logging in on the socket
- #3418 (UX of new functionality) - Add API endpoint
/api/currentuserto retrieve permissions & groups of currently logged in user
- #3425 - Change method of prompting for log in for guests without permissions
- Add documentation for
/api/accessendpoints and update existing documentation with permission information
- #3442 (UX of new functionality) - Plugin Manager: Add UI representation of incompatible installed plugins
- Removed a duplicated line of code
- #3454 - Explicitly document changed
LineProcessorStreambehaviour under Python 3
- (Re-)Implement login dialog through a UiPlugin to work around various issues with regards to caching and general workflow with the current approach.
- Docs for new access control situation.
- Remove some left-overs of old login UI and fix some code comments.
- #3125 - Fix potential dead lock when cancelling an SD print.
- #3202 - Fix a "dictionary changed size during iteration" error.
- #3267 - Fix OctoPrint not attempting to autoconnect to printer if port is set to
- #3278 - Plugin Manager: Disable plugin management while printer is busy (e.g. paused), not just when actively printing.
- #3295 - SWU: Fix a link to the documentation.
- #3301 - Fix a race condition in SD print detection that could cause a just cancelled print to "start again".
- #3302 - Timelapse: "Save as default" checkbox should always be enabled, regardless of printer state.
- #3309 - Fix overzealous filtering of history entries on the
- #3311 - Fix a wording issue.
- #3319 - Virtual printer: Do not assume that an
Sparameter must be present on
M220(and then crash when it's not).
- #3327 - Fix a wrong used HTTP status code on the
- #3334 - GCODE Viewer: Fix G2 and G3 arcs being misinterpreted.
- #3335 - Fix another "dictionary changed size during iteration" error.
- Fix syncing of commands with
okresponses. Thanks to @KevinOConner for the idea. See also #2599.
- Fix the unrendered timelapse list being visible when empty.
- SockJS iframe fallback no longer embeds SockJS library from a CDN.
- Aggressively escape return values of the server in the UI.
- #3348 (regression) - Fix an issue with the warning decorator trying to access non existing fields on instance methods, causing trouble with plugins still using deprecated settings methods.
- #3349 (regression) - Fix an issue with unset optional headers on file uploads, causing uploads to fail in case of a missing content type or file name, e.g. from Cura.
- #3350 (regression) - Appkeys: Fix wrong data type for newly generated keys under Python 3, causing the keys to not match and the plugin to not properly work.
- #3354 (regression - Fix timelapse start not triggering correctly due to using a no longer existing field in the PrintStarted payload.
- #3357 (regression) - Fix local autologin no longer working due to a logic change introduced by the new granular permission system.
- #3361 (regression) - Fix an exception raised when attempting to log out the single admin user if access control is disabled.
- #3362 (regression) - Fix escaping of placeholders in some error notifications.
- #3363 (regression) - Gracefully handle missing subfolders on file list nodes.
- #3364 (regression) - Make sure
datais actually set.
- Appkeys: Fix a deprecation warning. (regression)
- #3365 (regression) - Fix permissions of global API key
- #3366 (regression) - Appkeys: Fix issue causing 500/internal server error
- #3370 (regression) - Fix issue causing lost session in case of a client IP change
- #3371 (regression) - Python 3: Fix calculation of
rolling_windowin print time estimator
- #3375 (regression) - Fix
- #3384 (regression) - Python 3: Fix login using HTTP Basic Auth
- #3385 (regression) - Python 3: Fix serial port auto detection
- #3388 (bug in new functionality) - Granular permission system: Fix extruder controls being visible without control permission
- Fix a unicode issue under Windows (regression)
- #3396 (regression) - Fix timelapse listing not properly refreshing on rendering a new timelapse
- #3398 (bug in new functionality) - Fix checking of needs not being picky enough
- #3409 (regression) - Fix timelapse rendering progress reporting under Python 3
- #3419 (bug in new functionality) - Fix permission modelling for
- #3425 (bug in new functionality) - Fix permissions for
- #3426 (regression) - Fix "Remember me" checkbox on forced login screen
- #3428 (regression) - Fix plugin installation and other CLI interactions under Python 2 and 3 and Windows
- #3431 (regression) - Fix folder writability test under Python 3
- Fix endless loading issue when page is cached by browser in a tab and the server is down (regression)
- #3434 (regression) - Fixed autologin & handling of disabled access control
- #3400 (regression) - Reintroduced the message backlog on unauthenticated push sockets for better backwards compatibility for third party plugins.
- #3442 (bug in new functionality) - Fix incompatible plugins being marked as enabled
- (regression) Fixed handling of unset remote addresses
- #3455 (regression) - Fix a Python 3 bug with the
self._printerwrapper injected into plugins.
- #3456 - Fix firmware info not being reported to plugins if firmware autodetection is disabled. Not a regression, but severe enough to merit inclusion ASAP.
- #3459 (regression) - Fix login sessions not being persistent even with "Remember me" selected due to forced logout when becoming stale after 24h.
- (regression) Fix buggy implementation of
- (regression) Fix missing protection for blueprint plugins
- (regression) Fix yet another Python 3 list vs iterator issue
Special thanks to all the contributors!
Special thanks to everyone who contributed to this release, especially to balassy, ByReaL, cameroncros, CapnBry, cbxbiker61, dforsi, eyal0, FHeilmann, fieldOfView, jammi, justfalter, kantlivelong, kevans91, koenkooi, mkobler, noahsmartin, povlhp, razerraz, RyuzakiKK, Salandora, smurfix, tedder & ZachNo for their PRs!