New release candidate: 1.4.0rc3

This third RC of 1.4.0 fixes some regressions and issues in the new functionality observed with the first and second one:

Improvements

  • #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/login endpoint 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

Bug fixes

  • #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 - Python 3: Fix calculation of rolling_window in print time estimator
  • #3375 - Fix abort support for SimpleApiPlugin implementations
  • #3384 - Python 3: Fix login using HTTP Basic Auth
  • #3385 - Python 3: Fix serial port auto detection
  • #3388 - Granular permission system: Fix extruder controls being visible without control permission
  • Fix a unicode issue under Windows (regression)

The heads-up regarding Plugins and Python 3 from 1.4.0rc1 still applies.

You can find the full changelog and release notes as usual on Github.

Special thanks to everyone who contributed to this release candidate and provided full, analyzable bug reports!

As the past RCs have shown me that a lot of people appear to be unaware of this: Please do not install this RC if you expect a fully stable version. It is not a stable release, it is a release candidate, and of the next big release to boot: severe bugs may occur, and they might be bad enough that they make a manual downgrade to an earlier version necessary - maybe even from the command line.

You should feel comfortable with and capable of possibly having to do this before installing an RC.

If you want to and can help test this release candidate, you can find information on how to switch to the ā€œDevel RCsā€ release channel in this guide if not already done (also linked below). Please note that contrary to maintenance releases this RC is not available on the ā€œMaintenance RCsā€ release channel so if you are tracking that youā€™ll need to switch. The reason is that RCs of big releases might be more unstable at first than pure maintenance releases due to newly introduced features or very heavy refactorings, so Iā€™m splitting these between two release channels. Note that when tracking ā€œDevel RCsā€ youā€™ll get all releases from ā€œStableā€ and ā€œMaintenance RCsā€ as well.

Please provide feedback on this RC. For general feedback you can use this ticket on the tracker. The information that everything works fine for you is also valuable feedback šŸ˜„. For bug reports please follow ā€œHow to file a bug reportā€ - I need logs and reproduction steps to fix issues, not just the information that something doesnā€™t work so make sure to fill out all fields of the issue template.

Thanks!

Depending on the feedback regarding this version Iā€™ll look into fixing any observed regressions and bugs and pushing out a follow-up version as soon as possible and necessary - due to the upcoming holidays šŸŽ„ that will probably take until January however.

Links


This is a companion discussion topic for the original entry at https://octoprint.org/blog/2019/12/12/new-release-candidate-1.4.0rc3/
2 Likes

The first line of th edescription says

I assume that's a typo and should say "1.4.0"

Thanks for heads-up, fixed :sweat_smile:

I'm testing the 1.4.0rc3 on the production platform I'm working with here, baby-stepping to Py3 support but today, still using Py2.

I did an in-place upgrade from the OctoPrint -> Settings area, having adjusted the Software Update -> gear icon settings.

  • The update ran clean...
2019-12-20 12:57:18,995   /home/pi/oprint/bin/python -m pip --disable-pip-version-check install https://github.com/foosel/OctoPrint/archive/1.4.0rc3.zip --no-cache-dir
2019-12-20 12:57:20,609 > Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
2019-12-20 12:57:20,611 > Collecting https://github.com/foosel/OctoPrint/archive/1.4.0rc3.zip
2019-12-20 12:57:31,620 > Downloading https://github.com/foosel/OctoPrint/archive/1.4.0rc3.zip
2019-12-20 12:57:56,636 > Collecting flask<0.13,>=0.12
2019-12-20 12:58:01,889 > Downloading https://files.pythonhosted.org/packages/2e/48/f1936dadac2326b3d73f2fe0a964a87d16be16eb9d7fc56f09c1bea3d17c/Flask-0.12.4-py2.py3-none-any.whl (81kB)
2019-12-20 12:58:01,890 > Requirement already satisfied: Jinja2<2.9,>=2.8.1 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (2.8.1)
2019-12-20 12:58:01,891 > Requirement already satisfied: tornado==4.5.3 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (4.5.3)
2019-12-20 12:58:01,891 > Requirement already satisfied: regex!=2018.11.6 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (2019.8.19)
2019-12-20 12:58:07,958 > Collecting Flask-Login<0.5,>=0.4.1
2019-12-20 12:58:25,233 > Downloading https://www.piwheels.org/simple/flask-login/Flask_Login-0.4.1-py2.py3-none-any.whl
2019-12-20 12:58:25,234 > Requirement already satisfied: Flask-Babel<0.13,>=0.12 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (0.12.2)
2019-12-20 12:58:25,234 > Requirement already satisfied: Flask-Assets<0.13,>=0.12 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (0.12)
2019-12-20 12:58:25,235 > Requirement already satisfied: blinker<1.5,>=1.4 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (1.4)
2019-12-20 12:58:25,235 > Collecting werkzeug<0.17,>=0.16
2019-12-20 12:58:25,235 > Downloading https://files.pythonhosted.org/packages/ce/42/3aeda98f96e85fd26180534d36570e4d18108d62ae36f87694b476b83d6f/Werkzeug-0.16.0-py2.py3-none-any.whl (327kB)
2019-12-20 12:58:25,235 > Requirement already satisfied: cachelib<0.2,>=0.1 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (0.1)
2019-12-20 12:58:25,236 > Requirement already satisfied: PyYAML<6,>=5.1 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (5.1.2)
2019-12-20 12:58:25,236 > Collecting markdown<3.2,>=3.1
2019-12-20 12:58:25,236 > Downloading https://www.piwheels.org/simple/markdown/Markdown-3.1.1-py2.py3-none-any.whl (87kB)
2019-12-20 12:58:25,236 > Requirement already satisfied: pyserial<3.5,>=3.4 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (3.4)
2019-12-20 12:58:25,236 > Requirement already satisfied: netaddr<0.8,>=0.7.19 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (0.7.19)
2019-12-20 12:58:25,237 > Requirement already satisfied: watchdog<0.10,>=0.9.0 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (0.9.0)
2019-12-20 12:58:25,237 > Requirement already satisfied: sarge==0.1.5post0 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (0.1.5.post0)
2019-12-20 12:58:25,237 > Requirement already satisfied: netifaces<0.11,>=0.10.9 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (0.10.9)
2019-12-20 12:58:25,237 > Requirement already satisfied: pylru<1.3,>=1.2 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (1.2.0)
2019-12-20 12:58:25,237 > Requirement already satisfied: rsa<5,>=4.0 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (4.0)
2019-12-20 12:58:25,238 > Requirement already satisfied: pkginfo<1.6,>=1.5.0.1 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (1.5.0.1)
2019-12-20 12:58:25,238 > Requirement already satisfied: requests<3,>=2.22.0 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (2.22.0)
2019-12-20 12:58:25,238 > Collecting semantic_version<2.9,>=2.8
2019-12-20 12:58:25,238 > Downloading https://www.piwheels.org/simple/semantic-version/semantic_version-2.8.3-py2.py3-none-any.whl
2019-12-20 12:58:26,654 > Collecting psutil<5.7,>=5.6.5
2019-12-20 12:58:26,654 > Downloading https://files.pythonhosted.org/packages/73/93/4f8213fbe66fc20cb904f35e6e04e20b47b85bee39845cc66a0bcf5ccdcb/psutil-5.6.7.tar.gz (448kB)
2019-12-20 12:58:29,657 > Requirement already satisfied: Click<8,>=7 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (7.0)
2019-12-20 12:58:29,659 > Requirement already satisfied: awesome-slugify<1.7,>=1.6.5 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (1.6.5)
2019-12-20 12:58:29,660 > Requirement already satisfied: feedparser<5.3,>=5.2.1 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (5.2.1)
2019-12-20 12:58:35,778 > Collecting future<0.19,>=0.18.2
2019-12-20 12:58:35,779 > Downloading https://files.pythonhosted.org/packages/45/0b/38b06fd9b92dc2b68d58b75f900e97884c45bedd2ff83203d933cf5851c9/future-0.18.2.tar.gz (829kB)
2019-12-20 12:58:37,117 > Requirement already satisfied: websocket-client<0.57,>=0.56 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (0.56.0)
2019-12-20 12:58:37,118 > Requirement already satisfied: wrapt<1.12,>=1.11.2 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (1.11.2)
2019-12-20 12:58:37,118 > Requirement already satisfied: emoji<0.6,>=0.5.4 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (0.5.4)
2019-12-20 12:58:37,119 > Requirement already satisfied: frozendict<1.3,>=1.2 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (1.2)
2019-12-20 12:58:37,620 ! WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', BadStatusLine('No status line received - the server has closed the connection',))': /simple/sentry-sdk/
2019-12-20 12:58:44,569 > Collecting sentry-sdk==0.13.2
2019-12-20 12:58:44,570 > Downloading https://www.piwheels.org/simple/sentry-sdk/sentry_sdk-0.13.2-py2.py3-none-any.whl (91kB)
2019-12-20 12:58:44,570 > Requirement already satisfied: filetype<2,>=1.0.5 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (1.0.5)
2019-12-20 12:58:44,570 > Collecting futures<3.4,>=3.3
2019-12-20 12:58:44,571 > Downloading https://files.pythonhosted.org/packages/d8/a6/f46ae3f1da0cd4361c344888f59ec2f5785e69c872e175a748ef6071cdb5/futures-3.3.0-py2-none-any.whl
2019-12-20 12:58:44,571 > Requirement already satisfied: monotonic<1.6,>=1.5 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (1.5)
2019-12-20 12:58:44,571 > Requirement already satisfied: scandir<1.11,>=1.10 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (1.10.0)
2019-12-20 12:58:44,571 > Requirement already satisfied: chainmap<1.1,>=1.0.3 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (1.0.3)
2019-12-20 12:58:44,571 > Requirement already satisfied: typing<4,>=3.7.4.1 in ./oprint/lib/python2.7/site-packages (from OctoPrint==1.4.0rc3) (3.7.4.1)
2019-12-20 12:58:44,572 > Requirement already satisfied: itsdangerous>=0.21 in ./oprint/lib/python2.7/site-packages (from flask<0.13,>=0.12->OctoPrint==1.4.0rc3) (1.1.0)
2019-12-20 12:58:44,572 > Requirement already satisfied: MarkupSafe in ./oprint/lib/python2.7/site-packages (from Jinja2<2.9,>=2.8.1->OctoPrint==1.4.0rc3) (1.1.1)
2019-12-20 12:58:44,572 > Requirement already satisfied: backports-abc>=0.4 in ./oprint/lib/python2.7/site-packages (from tornado==4.5.3->OctoPrint==1.4.0rc3) (0.5)
2019-12-20 12:58:44,572 > Requirement already satisfied: singledispatch in ./oprint/lib/python2.7/site-packages (from tornado==4.5.3->OctoPrint==1.4.0rc3) (3.4.0.3)
2019-12-20 12:58:44,573 > Requirement already satisfied: certifi in ./oprint/lib/python2.7/site-packages (from tornado==4.5.3->OctoPrint==1.4.0rc3) (2019.9.11)
2019-12-20 12:58:44,573 > Requirement already satisfied: Babel>=2.3 in ./oprint/lib/python2.7/site-packages (from Flask-Babel<0.13,>=0.12->OctoPrint==1.4.0rc3) (2.7.0)
2019-12-20 12:58:44,573 > Requirement already satisfied: webassets>=0.11.1 in ./oprint/lib/python2.7/site-packages (from Flask-Assets<0.13,>=0.12->OctoPrint==1.4.0rc3) (0.12.1)
2019-12-20 12:58:44,574 > Requirement already satisfied: setuptools>=36 in ./oprint/lib/python2.7/site-packages (from markdown<3.2,>=3.1->OctoPrint==1.4.0rc3) (41.5.1)
2019-12-20 12:58:44,574 > Requirement already satisfied: pathtools>=0.1.1 in ./oprint/lib/python2.7/site-packages (from watchdog<0.10,>=0.9.0->OctoPrint==1.4.0rc3) (0.1.2)
2019-12-20 12:58:44,574 > Requirement already satisfied: argh>=0.24.1 in ./oprint/lib/python2.7/site-packages (from watchdog<0.10,>=0.9.0->OctoPrint==1.4.0rc3) (0.26.2)
2019-12-20 12:58:44,574 > Requirement already satisfied: pyasn1>=0.1.3 in ./oprint/lib/python2.7/site-packages (from rsa<5,>=4.0->OctoPrint==1.4.0rc3) (0.4.7)
2019-12-20 12:58:44,574 > Requirement already satisfied: idna<2.9,>=2.5 in ./oprint/lib/python2.7/site-packages (from requests<3,>=2.22.0->OctoPrint==1.4.0rc3) (2.8)
2019-12-20 12:58:44,575 > Requirement already satisfied: chardet<3.1.0,>=3.0.2 in ./oprint/lib/python2.7/site-packages (from requests<3,>=2.22.0->OctoPrint==1.4.0rc3) (3.0.4)
2019-12-20 12:58:44,575 > Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in ./oprint/lib/python2.7/site-packages (from requests<3,>=2.22.0->OctoPrint==1.4.0rc3) (1.25.6)
2019-12-20 12:58:44,575 > Requirement already satisfied: Unidecode<0.05,>=0.04.14 in ./oprint/lib/python2.7/site-packages (from awesome-slugify<1.7,>=1.6.5->OctoPrint==1.4.0rc3) (0.4.21)
2019-12-20 12:58:44,575 > Requirement already satisfied: six in ./oprint/lib/python2.7/site-packages (from websocket-client<0.57,>=0.56->OctoPrint==1.4.0rc3) (1.12.0)
2019-12-20 12:58:44,575 > Requirement already satisfied: pytz>=2015.7 in ./oprint/lib/python2.7/site-packages (from Babel>=2.3->Flask-Babel<0.13,>=0.12->OctoPrint==1.4.0rc3) (2019.3)
2019-12-20 12:58:44,576 > Building wheels for collected packages: OctoPrint, psutil, future
2019-12-20 12:58:44,576 > Building wheel for OctoPrint (setup.py): started
2019-12-20 12:58:48,993 > Building wheel for OctoPrint (setup.py): finished with status 'done'
2019-12-20 12:58:48,993 > Created wheel for OctoPrint: filename=OctoPrint-1.4.0rc3-py2.py3-none-any.whl size=3105301 sha256=1502b201a2f42eb21ceae9691f90cd18a0f1a82ceb9ab94ef875331b8821be1b
2019-12-20 12:58:48,994 > Stored in directory: /tmp/pip-ephem-wheel-cache-eLnuAq/wheels/98/ff/4d/ae6e9513eb8d95395653ad7912629b7fd3c2540f34e0cfef9e
2019-12-20 12:58:48,994 > Building wheel for psutil (setup.py): started
2019-12-20 12:58:53,997 > Building wheel for psutil (setup.py): finished with status 'done'
2019-12-20 12:58:53,998 > Created wheel for psutil: filename=psutil-5.6.7-cp27-cp27mu-linux_armv7l.whl size=273436 sha256=4734cc1b578c4816b71f8c1dab3ddf4785a933a11fc670e286af0ef43b8fdcf9
2019-12-20 12:58:53,998 > Stored in directory: /tmp/pip-ephem-wheel-cache-eLnuAq/wheels/52/41/b0/bf50409fe2b1d3b79afa3eed71b54b3e30fe5b695db2c7ba2e
2019-12-20 12:58:53,999 > Building wheel for future (setup.py): started
2019-12-20 12:58:56,090 > Building wheel for future (setup.py): finished with status 'done'
2019-12-20 12:58:56,090 > Created wheel for future: filename=future-0.18.2-cp27-none-any.whl size=502568 sha256=2d8c378a14587a13a3e30f896b3b111218a294c66861c96040c5568b30a0b9c3
2019-12-20 12:58:56,090 > Stored in directory: /tmp/pip-ephem-wheel-cache-eLnuAq/wheels/8b/99/a0/81daf51dcd359a9377b110a8a886b3895921802d2fc1b2397e
2019-12-20 12:58:56,090 > Successfully built OctoPrint psutil future
2019-12-20 12:58:56,091 > Installing collected packages: werkzeug, flask, Flask-Login, markdown, semantic-version, psutil, future, sentry-sdk, futures, OctoPrint
2019-12-20 12:58:56,091 > Found existing installation: Werkzeug 0.15.6
2019-12-20 12:58:56,091 > Uninstalling Werkzeug-0.15.6:
2019-12-20 12:58:56,092 > Successfully uninstalled Werkzeug-0.15.6
2019-12-20 12:58:58,095 > Found existing installation: Flask 0.10.1
2019-12-20 12:59:01,380 > Uninstalling Flask-0.10.1:
2019-12-20 12:59:01,381 > Successfully uninstalled Flask-0.10.1
2019-12-20 12:59:01,381 > Found existing installation: Flask-Login 0.2.11
2019-12-20 12:59:01,381 > Uninstalling Flask-Login-0.2.11:
2019-12-20 12:59:01,381 > Successfully uninstalled Flask-Login-0.2.11
2019-12-20 12:59:01,382 > Found existing installation: Markdown 3.0.1
2019-12-20 12:59:01,382 > Uninstalling Markdown-3.0.1:
2019-12-20 12:59:01,382 > Successfully uninstalled Markdown-3.0.1
2019-12-20 12:59:01,382 > Found existing installation: semantic-version 2.6.0
2019-12-20 12:59:02,712 > Uninstalling semantic-version-2.6.0:
2019-12-20 12:59:02,713 > Successfully uninstalled semantic-version-2.6.0
2019-12-20 12:59:02,713 > Found existing installation: psutil 5.6.3
2019-12-20 12:59:02,714 > Uninstalling psutil-5.6.3:
2019-12-20 12:59:02,714 > Successfully uninstalled psutil-5.6.3
2019-12-20 12:59:02,715 > Found existing installation: future 0.17.1
2019-12-20 12:59:02,715 > Uninstalling future-0.17.1:
2019-12-20 12:59:02,715 > Successfully uninstalled future-0.17.1
2019-12-20 12:59:04,016 > Found existing installation: sentry-sdk 0.7.7
2019-12-20 12:59:04,017 > Uninstalling sentry-sdk-0.7.7:
2019-12-20 12:59:04,017 > Successfully uninstalled sentry-sdk-0.7.7
2019-12-20 12:59:04,018 > Found existing installation: futures 3.2.0
2019-12-20 12:59:04,018 > Uninstalling futures-3.2.0:
2019-12-20 12:59:04,018 > Successfully uninstalled futures-3.2.0
2019-12-20 12:59:04,018 > Found existing installation: OctoPrint 1.3.12
2019-12-20 12:59:04,019 > Uninstalling OctoPrint-1.3.12:
2019-12-20 12:59:04,019 > Successfully uninstalled OctoPrint-1.3.12
2019-12-20 12:59:08,022 > Successfully installed Flask-Login-0.4.1 OctoPrint-1.4.0rc3 flask-0.12.4 future-0.18.2 futures-3.3.0 markdown-3.1.1 psutil-5.6.7 semantic-version-2.8.3 sentry-sdk-0.13.2 werkzeug-0.16.0
  • My user-add/remove features seem to work as expected.
  • I had a problem initially with this code...

Before:

from octoprint.server import userManager
opUsers = userManager.get_all_users()

After:

from octoprint.server import userManager
opUsers = map(lambda user: user.as_dict(), userManager.get_all_users())
  • I note that removing a user using the REST API results in the record being removed from the ~/.octoprint/users.yaml file (no octoprint.log errors). The web interface prompts that a settings change has occurred. I choose the "all" button version of the two but the "bob" (ross) user is still shown. Closing the Settings page and returning still shows bob. Restarting OctoPrint now shows the absence of the bob user, as expected.

I still have an issue where it doesnā€™t stay logged in. Is there something I need to do to make it so that I donā€™t have to log in like 5 times a day?