This is a first and more technical report of Alpine City Strategic Sprint 2018 results. A press release style one will follow soon!
Our primary goal was to push the efforts of porting Plone to Python 3 in the right direction, remove blockers here and figure out ways - and document how to - port Plone to Python 3. Thanks to the Plone Foundation for sponsoring the strategic sprint!
Releases and Updates
At first Maurits and Michael worked on new releases of Zope 2 and Zope 4 including with the latest hotfixes and updated dependency versions. Releasing Zope 2 also removed the last blocker for a Plone 5.1 release.
After this releases Jens updated the pinned versions of Plone 5.2 to newest possible versions. Since we are using an old version of Unidecode package for a while he took the opportunity to have a look why test are failing there. Its all the normalizers in plone.i18n which are doing some too fancy stuff not using the API of Unidecode. Together with Gogo we managed to fix this in a sane way and are on the latest release. This includes more fancy normalizing in languages like Chinese.
Blocker for Plone: GenericSetup etc.
Godefroid joined Saturday and reviewed/fixed Davids Products.GenericSetup pull request, which contains a series of commits from Andreas, Tom, Godefroid, Michael and David. All those targeting Python 3 support and are essential for Plone on Python 3. It is still open. As usual some nasty bugs needed to be hunted down resulting in open pull requests in AccessControl and Zope.
Also Michael and Godefroid started porting plone.testing to Python3. It uses ZServer (which wont be ported) and the WSGI server. It is not finished yet, so functional testing on WSGI is not possible for now. Next step is then plone.app.testing.
Porting to Python 3
Philip, Davi, Katja, Max, Jens and Gogo worked on porting several packages to Python 3. First, we found using sixer is the way to go, but even sixer is not smart enough to detect all cases and also creates false replacements, so we had to use our brain to make it work. The sixer process is documented now. We identified 139 packages to port and 109 of them are now checked with sixer. It does not mean that all of this works in Python 3, but probability that it imports are high. After we had several packages importable Philip went the other way around and used a buildout with Python3, Zope 4 and Plone and started it up, followed the failures and fixed them. So more and more startup code started to work. Plenty of this changes are still on his hard disc, so stay tuned to have a look at plenty of pull requests in near future.
While porting, Katja stumbled over PlacelessTranslationsService (PTS) which is a relict from former times. We don't want to port it to Python 3. While Katja and Jens tried to get rid of the package we found two things: old i18n-Folder would not be supported any more (which is fine, we may provide a Python 2.7 of PTS version for BBB reasons, like if an addon needs it). The language negotiator from here is still used and so we be moved it to plone.i18n as is. Also we will loose some questionable micro optimizations implemented as ugly patches on zope.i18n. If we want to micro-optimize, this should go directly in zope.i18n.
Timo pointed us to another problem with Plone 5.2, Zope 4 and the plone.restapi PLIP. Johannes worked on it, but it is still work in progress.
Mosaic got some love too. Peter and Davi worked to make fluid rows working. We updated the documentation for advanced features. A pull request is pending and waiting for review.
Also Peter worked on some UI cleanup, like variables for mediaqueries in barceloneta to hopefully make it more understandable and fixing weird scrollbar bugs.
Markus fixed some UI problems as well, like fixed pagination for folders and next prev navigation (arrows are now css content).
Global Allow Discussion
Markus started a discussion about global-allow semantics: it can be confusing, because together with constrain types its meaning is a bit fuzzy. Documentation may improve here!
Event and Multilingual
Also, plone.app.event now has language independent fields for start, end, whole_day, open_end. Peters pull request was already merged.
YAFOWIL - autoform/ alternative form engine for Plone
Robert worked on porting YAFOWIL to Python 3. This is primary a boring work converting several 1000s lines of doctests to unittests.
While doing so, we discussed (not the first time) how much work it might be to create a
YAFOWIL autoform as a drop-in replacement for plone.autoform and its z3c.form generator. In fact the idea is to have way more flexible declarative forms following the YAFOWIL philosophy of declaring forms (using data structures) and not writing code for forms. On Saturday morning Robert and Jens decided to give it a try. After 4 hours pair-programming we got a working prototype (see branch). Robert continued some more hours and now we have a foundation for further work which is already impressive. Next work to be done is writing tests, mapping widgets, create special Plone widgets (like RelatedItems using its pattern in YAFOWIL), vocabulary handling, ordering, ... Markus is interested working on it in the next months if we provide instructions how to work on it, which we will do! Gogo was really happy to see this happen!
Plone still works after all our merges!
At the end of the Alpine City Strategic Sprint we were all happy to get so many things done. In the discussion after the final stand up meeting we identified necessity for discussion in the broader community:
- webdav, still important, for example for other multi-upload/download and external editor,
- clockserver is missing if we get rid of zserver - how to deal with it?
Finally Johannes announced Buschenschanksprint 2018 (South of Graz/ Austria) in June 11.-15.!!!
Also Michael told us, Gocept plans to organize a sprint dependend on the outcomes of this one, stay tuned!
Fun in the snow
The day after the Sprint, Peter, Michael, Godefroid and Jens did some tobogganing in the Wildschönau. It was a great day in the the snow with about 16km of speeding down the mountains on a sledge! At the end we had a great Austrian lunch at the Söllerwirt in Thierbach.