New release candidate: 1.4.0rc1

After 3 years on 1.3.x, it’s time for a new big release. And this first release candidate of 1.4.0 is the very first step towards it.

The full changelog is packed with new features, improvements and fixes of existing functionality. Some highlights:

  • 1.4.0 introduces a new granular permission system that allows you to fully customize which users (and - new! - user groups) are allowed to access which functionality. See the screenshots below for an idea of how all this looks visually. Special thanks to @Salandora for a lot of the legwork on this!
  • If you’ve followed me on OctoPrint On Air or paid some closer attention to the output of plugin manager or software updater in OctoPrint, you’ll have heard about the pending end of life of Python 2 in favor of the new version Python 3. OctoPrint so far only supported running under Python 2 - this has changed now with this RC and 1.4.x in general, which should allow OctoPrint to run problem free under both Python 2 and 3. Please help test this! And to all the plugin authors among you, please also take note of the heads-up in the changelog and also quoted below. Huge thanks to everyone who helped in the adjustment effort needed to make this possible, especially @ByReaL, @razerraz, @smurfix & @tedder! Wouldn’t have been possible without y’all!
  • Additionally to the somewhat anachronistic MPEG2 format, OctoPrint now also supports to create timelapse recordings in H264. Special thanks to @koenkooi for this!
  • If the underlying render engine supports it there’ll be a progress bar for ongoing timelapse rendering now thanks to @ZachNo!
  • A bunch of new events and plugin hooks allow for even more possibilities in regards to customization through plugins.
  • The Software Updater can now be configured to track Github Commits for OctoPrint right from the UI. A new version check pypi_release allows checking the Python Package Index for new releases of a package, and this is also used to optionally allow to keep pip updated right from within OctoPrint itself instead of having to go through the command line for that. Note that this is disabled by default since I do not control pip updates and hence cannot guarantee trouble free updates.
  • The Plugin Manager now has a search function and some filters to make it easier to navigate through the list of installed plugins. See the screenshot below. Additionally it will now offer to delete plugin data from plugins about to be uninstalled, and also offers a general clean-up function for left-over plugin data.
  • After a lot of begging in that regard, the Software Updater and the Plugin Manager both can now be configured to ignore the throttle state of the Pi by setting ignore_throttled in config.yaml for either or both. Note that this setting is intentionally not exposed in the UI since too many people would use it to shoot themselves into the foot. Updating on a throttled system has caused corrupt installs in the past, same goes for new plugin installs, don’t say I didn’t warn you.
  • There have of course also been a bunch of fixes for bugs reported in older versions, like a fix of a potential dead lock when cancelling an SD print, overzealous filtering of history entries on the /printer/{tool|bed|chamber} API endpoints, G2 and G3 arcs being misinterpreted in the GCODE viewer and more.
  • … and more.

Due to the new Python 3 compatibility there’s a heads-up for plugin authors:

This release candidate officially adds support to run OctoPrint under Python 3 instead of 2. 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 post on the OctoPrint Community Forums 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.

You can find the full changelog and release notes as usual on Github. It may look a bit shorter than the maintenance release changelogs, but that’s because the points listed under “new features” pack quite the punch with regards to involved work 😉

Special thanks to everyone who contributed to this release candidate and provided full, analyzable bug reports and pull requests, especially balassy, ByReaL, cameroncros, CapnBry, cbxbiker61, dforsi, eyal0, FHeilmann, jammi, justfalter, kantlivelong, kevans91, koenkooi, mkobler, noahsmartin, povlhp, razerraz, RyuzakiKK, Salandora, smurfix, tedder & ZachNo for their PRs!

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.

Links


This is a companion discussion topic for the original entry at https://octoprint.org/blog/2019/11/25/new-release-candidate-1.4.0rc1/
8 Likes

Congratulations on getting this out.

1 Like

What would be the easiest/best way to "convert" say an OctoPi install to use Python 3 instead of Python 2 for testing?

Make a backup, make a new install of 1.4.0rc1 and playback the backup

@Ewald_Ikemann,
I've reinstalled octoPI from scratch, updated octoprint to 1.4.0rc1 but I'm not sure that now octoprint use phyton 3.x instead 2.7.
How I can check

thx, ciao
Leo

As said in the first post:

There's a misunderstanding here. OctoPrint cannot and will not magically switch the environment it's running in to Python 3. But it can now be run under Python 3 environments which so far was not possible.

Somewhere down the road OctoPi will switch to Python 3 by default then.

Probably creating a Python 3 virtualenv (or recreating /home/pi/oprint as one) and installing OctoPrint into that. I think Python 3 should definitely be already available on jessie and buster images (0.16 and 0.17 in OctoPi terms) so that should be pretty straight forward.

Thanks @foosel

It's true, I've tried to remove complitly python2.7 from octopi (apt-get/aptitude) and I had to reinstall all!!!
I'ts not a problem, but I'm not a programmer.
I can test but I need to know how to switch from py2.7 to 3.x

Thank you.

Leo

Python 3 and Python 2 can be installed side-by-side, so there is no need to uninstall Python 2. With OctoPi, an additional copy of Python 2 is installed in the folder "oprint", so removing the system installed Python 2 - even if succesful - changes nothing to how OctoPrint runs.

A version of Python 3 is already available on your OctoPi image. I was mainly wondering how to make an "oprint3" to run OctoPrint in.

I'm not sure if this workflow is correct but I've used something like this before on the Pi:

  1. pip3 install pip --upgrade # upgrade pip3 globally
  2. mv ~/OctoPrint ~/OctoPrint.py2
  3. cd ~
  4. git clone https://github.com/foosel/OctoPrint.git
  5. sudo service octoprint stop
  6. mv ~/oprint ~/oprint.py2
  7. virtualenv -p python3 oprint # Create a Python 3—based virtual environment
  8. source oprint/bin/activate # Activate it
  9. cd OctoPrint
  10. git checkout devel # Set things to the development branch, for example. See notes below
  11. python setup.py clean
  12. pip install .
  13. octoprint serve

Here, I'm saving the original ~/OctoPrint and ~/oprint folders so that you could in theory go back to your earlier setup, assuming that you exercised the Backup plugin. I used devel as an example branch but that's not necessarily what you might want for what you're doing.

Personally, I like to re-use the ~/oprint virtual environment name for the sake of consistency in other scripts you might have. Others might disagree with me on this.

Notes:

Before any of this, you might want to run python3 --version before activating the virtual environment to verify which version of Python 3 you're running. The target for OctoPrint development is either 3.6 or 3.7 (unsure).

Maybe somebody else can accurately identify what the git checkout ... command should be for this or offer an alternative workflow.

2 Likes

Thanks for this new RC and your hard work!

As the timelapse can use h264, can the livestream use h264 too?
It can save lot of bandwith and increase the quality of the stream.

Many thanks!

1 Like

@OutsourcedGuru .... I try!

Steps made and "problem found".

pi@octopi:~ $ sudo apt-get install python3-pip
pi@octopi:~ $ mv OctoPrint/ OctoPrint.py2
pi@octopi:~ $ git clone https://github.com/foosel/Octoprint.git
pi@octopi:~ $ sudo service octoprint stop
pi@octopi:~ $ mv oprint/ oprint.py2
pi@octopi:~ $ virtualenv -p python3 oprint
(oprint) pi@octopi:~ $ cd OctoPrint
-bash: cd: OctoPrint: No such file or directory
(oprint) pi@octopi:~ $ ls
mjpg-streamer  **Octoprint**  OctoPrint.py2  oprint  oprint.py2  scripts
(oprint) pi@octopi:~/Octoprint $ git checkout devel
Branch 'devel' set up to track remote branch 'devel' from 'origin'.
Switched to a new branch 'devel'
(oprint) pi@octopi:~/Octoprint $ python setup.py clean
running clean
'build/lib' does not exist -- can't clean it
'build/bdist.linux-armv7l' does not exist -- can't clean it
'build/scripts-3.7' does not exist -- can't clean it
recursively removing *.pyc from 'src'
removing 'me/pi/Octoprint/src/octoprint_setuptools/__pycache__/__init__.cpython-37.pyc'
removed me/pi/Octoprint/src/octoprint_setuptools/__pycache__ since it was empty
(oprint) pi@octopi:~/Octoprint $ pip install .
[A lot of things!]

Run it!
It's correct ?!?!?!

  • Starting OctoPrint 1.5.0.dev1+g4469a2d8

| hardware:
| cores: 4
| freq: 1400.0
| ram: 385253376
| os:
| id: linux
| platform: linux
| plugins:
| pi_support:
| model: Raspberry Pi 3 Model A Plus Rev 1.0
| octopi_version: 0.17.0
| python:
| pip: 19.3.1
| version: 3.7.3
| virtualenv: /home/pi/oprint

BTW I prefer also to maintain only one environment, what I need to modify ??

Thank you

Thank you

In my line 4 above I've done a stylized capitalization of OctoPrint. In your git clone command you have not... and then your cd command into that folder seems to have failed (due to the lowercase "p" perhaps). And then somehow you're now in the ~/Octoprint folder.

Remember from my tentative instructions that maybe devel isn't the branch you should be chasing? The topic of this thread is "1.4.0rc1" and devel isn't the same thing.

I would suggest holding off at this point. If you want to go back to what you had before:

deactivate # This is only necessary if your prompt starts with "(oprint)"
cd ~
rm -Rf ~/Octoprint
rm -Rf ~/oprint
mv ~/oprint.py ~/oprint
mv ~/OctoPrint.py2 ~/OctoPrint
sudo reboot
1 Like

On future release, for stability, is it possible to boot Octopi on USB key ?

I see no reason why it shouldn't work :slight_smile:

https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/msd.md

And the RPis can boot from USB without further addition...
AFAIK, in the moment you still need a boot loader on SD card

Only for the first two models.
Raspberry Pi 2B v1.2, 3A+, 3B, and 3B+ (and maybe 4 but I'm not sure if it's ready yet) are able to boot without an sd card

1 Like

Yes, but you have to change things on the Pi and they can't be undone:
https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/msd.md

Yes on some devices you have to choose between USB host boot mode and USB device mode.
The pi 3 also requires the USB boot mode bit for network boot