-
Notifications
You must be signed in to change notification settings - Fork 73
Description
This is a follow up of #67.
We think that the release cycle as currently implemented between the Python bindings and the back-end of WhiteboxTools is somewhat misleading to the user, and could lead to tricky situations.
Indeed, as a consuming developer, we expect the version of the Python bindings available on PyPI to be in sync with the WhiteboxTools back-end. When using v2.3.0 of the Python bindings, we should be using v2.3.0 of the WhiteboxTools back-end. This is a strong expectation made by any developer using virtually any third-party library. It notably allows rolling back to an earlier version when a newly released version breaks (which was the case between v2.3.0 and 2.4.0). However, we discovered, while dealing with #67, that this was actually not the case when using the Python bindings of Whitebox, because the Python bindings dynamically download the latest version of the WhiteboxTools back-end binaries from the Whitebox server. This means that it was basically impossible for us to rollback to v2.3.0, because v2.3.0 of the Python bindings was downloading v2.4.0 of the WhiteboxTools back-end anyway.
We think that more proper designs could be implemented easily. Here are a couple options that we can think of:
- Package the WhiteboxTools back-end binaries directly in the package uploaded to PyPI. This allows the maintainer of the Python bindings to freeze/package the version of the back-end that's going to be used by the Python bindings, ensuring that they remain in sync.
- Compile the WhiteboxTools back-end binaries as part of the build process of the Python bindings, before uploading to PyPI. This is a slight variation of option 1 that starts from the sources of the back-end instead of the pre-built binaries.
- Ask the maintainer of the WhiteboxTools back-end (@jblindsay) to host versioned binaries on the Whitebox server, instead of only the latest version. This would allow the Python bindings to still download the binaries from the server, but at least use the version of the back-end that is in sync with that of the Python bindings.
We think that options 1 and 2 would be best, 3 being a bit more hacky and error-prone, in case there's an issue with the Whitebox server.
Let us know if we can help in any way. We think that this would be a major improvement of this (already) great toolbox, and a step that would take it closer to being production-ready in a lot of cases.