Plone 6.1.0a4 released

I have made a fourth alpha release of Plone 6.1.

Release notes for Plone 6.1.0a4

If you want to jump straight in, here are two important links:

Highlights

Major changes since 6.1.0a3:

  • Products.CMFPlone:
    • Use details element for collapsibles in the resource registry. Makes it possible to toggle elements even with broken or missing javascript.
    • Remove queryCatalog and getFolderContents skins script.
    • Plone upgrade page: show error when upgrade is needed but no upgrades are available. Especially show a note when the plone.app.upgrade package is not available.
    • Plone upgrade page: show list of previously installed packages that are currently missing. For example: plone.app.discussion may be missing in Plone 6.1, unless you explicitly add it, or depend on the Plone package.
    • Remove PropertiesTool module and delete the portal_properties tool from the site in an upgrade step.
      This tool was deprecated and scheduled for removal in Plone 6.1. If you use this tool in an add-on, you should move to storing settings in the portal_registry instead.
    • Remove propertiestool import step and usage of portal_properties and site_properties
    • Mockup TinyMCE settings: Remove deprecated AtD plugin settings.
  • plone.app.theming: When calling the html serializer pass an encoding. This is needed because we updated from lxml 4 to 5.
  • plone.app.iterate: Remove old GenericSetup profile with id plone.app.iterate. See .
  • Various packages: remove portal_properties code.
  • plone.base:
    • Mockup TinyMCE settings: Remove deprecated AtD (After the Deadline spell checker) plugin settings and related views and interfaces.
    • Remove ISearchSchemas types_not_searched "Discussion Item" value to make plone.app.discussion a core addon.
      It is actually not needed anyway, also not part of the underlying vocabulary and would be lost on first save in control-panel.
  • plone.api: Report if a permission does not exist when calling api.user.has_permission.
  • plone.restapi:
    • Add cache rules for @site and @navroot.
    • Added TeaserBlockSerializer which updates the contents of a teaser block from its target if the block has "overwrite": false.
  • plone.app.content: Speed improvement in getVocabulary for large vocabularies.
  • plonetheme.barceloneta:
    • Add styles for details/summary based collapsibles.
    • Add support for labels wrapping input fields.
    • Add the portal_url parameter to be used with Diazo rules and implement it in backend.xml.

Volto frontend

The default frontend for new Plone 6 sites is Volto.
Note that this is a JavaScript frontend that you need to run in a separate process with NodeJS.

Plone 6.1 is meant to be used with Volto 18.
Latest release is 18.0.0-alpha.42. See the changelog.

Or use the latest Volto 17.

Classic UI

The HTML based and server side rendered UI that was present in Plone 5.2 and earlier major Plone releases is still available and has also been updated and improved upon in Plone 6.0 and 6.1. Our documentation now refers to this frontend as 'Classic UI'.

Docker

As we are still in the alpha stage, we are not yet creating plone-backend Docker images.

Python compatibility

This release supports Python 3.10, 3.11, and 3.12.

pip, buildout, setuptools

In Plone core we use these versions to install Plone:

pip==24.0
setuptools==69.5.1
wheel==0.43.0
zc.buildout==3.0.1

In general you are free to use whatever versions work for you, but these worked for us.
setuptools 70 will cause problems with current zc.buildout 3.0.1, so keep your eyes out for a new zc.buildout release.

Installation

For installation instructions, see the documentation.

Issues

If you find any issues, please report them in the main issue tracker.

4 Likes

i test an addon with the new release and i get an error if i run tox -e circular.
my tox config:


[testenv:circular]
description = ensure there are no cyclic dependencies
use_develop = true
skip_install = false
# Here we must always constrain the package deps to what is already installed,
# otherwise we simply get the latest from PyPI, which may not work.
constrain_package_deps = true
set_env =

##
# Specify extra test environment variables in .meta.toml:
#  [tox]
#  test_environment_variables = """
#      PIP_EXTRA_INDEX_URL=https://my-pypi.my-server.com/
#  """
##
allowlist_externals =
    sh
deps =
    pipdeptree
    pipforester
    -c constraints-mxdev.txt

commands =
    # Generate the full dependency tree
    sh -c 'pipdeptree -j > forest.json'
    # Generate a DOT graph with the circular dependencies, if any
    pipforester -i forest.json -o forest.dot --cycles
    # Report if there are any circular dependencies, i.e. error if there are any
    pipforester -i forest.json --check-cycles -o /dev/null

here the error:

Detecting cyclic edges
found edge products-cmfplone -> plone-app-discussion
found edge plone-app-discussion -> plone-api
Cyclic dependencies detected

Not sure if the release related?

Update: if i downgrade my requirements to 6.1.0a3 all is fine.

constraints.txt

-c https://dist.plone.org/release/6.1.0a4/constraints.txt

setup.py of my addon

...
install_requires=[
  ...
  Plone==6.1.0a4
  ...
]
...

plone.app.discussion is being turned into a core add-on so it is going to live "above" Products.CMFPlone. This work is close to merging, but not fully done. It could be that something is wrong now.

The message seems wrong though. A cyclic dependency would be if A depends on B depends on C depends on A. Here it just says cmfplone depends on discussion depends on plone.api. That is no cycle. Ah, but plone.api depends on cmfplone. That part is missing from the message.

Really the current p.a.discussion release should not depend on plone.api as it should not be used on core.

I don't quite see what has changed in alpha 4 that would affect this. But it should be solved once plone.app.discussion has been moved out of core.

Okay, i deactivate the circular checks in my CI and wait until the work is done.

Next Problem, perhaps?

In my addon i have setup some requirements

install_requires=[
        "setuptools",
        "Plone>6.0",
        "z3c.jbot",
        "plone.app.theming",
        "plone.resource",
        "zope.i18nmessageid",
        "zope.interface",
        "zope.publisher",
    ],
    extras_require={
        "test": [
            "plone.app.testing",
            # Plone KGS does not use this version, because it would break
            # Remove if your package shall be part of coredev.
            # plone_coredev tests as of 2016-04-01.
            "plone.testing>=5.0.0",
            "plone.app.robotframework[debug]",
            "plone.restapi[test]",
            "plone.api",
            "plone.app.dexterity",
            "plone.browserlayer",
            "twine",
            "zope.testrunner==6.4",
            "zest.releaser[recommended]",
            "zestreleaser.towncrier",
        ],
    },

a call of tox -e test fails, because Products.CMFPlone 6.0.12 is checked out. But in my constraints.txt i need Plone 6.1.0a4. The reason is the tox configuration: constrain_package_deps = false.
I investigated my problem and searched the package which override the constrain. i found the package, it was plone.restapi.

The question is why?

If i commented out plone.restapi in my setup.py, all is fine. if i include the plone.restapi package, i get an error, because Products.CMFPlone and plone.base mismatch. Products.CMFPlone 6.0.12 needs plone.base < 2.0

Did you try with constrain_package_deps = true? Tox calls pip several times, and not always will your own constraints file be applied. With this setting it should be. Maybe FAQ - tox has hints.

In the past I have seen that sometimes a problem is fixed by setting constrain_package_deps = true and sometimes a problem is fixed by setting it to false...

I have upgraded two large Sites to Plone 6.1.0a4, looks very good for me. Thanks for the release.

Okay, i found an issue, but i must investigate what happen really.

with a richtfield and option required=true it's not possible to send the form, pat-validation show an error and say 'empty field please fill out'. but i fill a text in the tinymce editor area. with option required=false, all is fine

directives.widget("text", RichTextFieldWidget, pattern_options=TINY_MCE_MIN_OPTIONS)
    text = RichText(
        title="Anzeigentext",
        default_mime_type="text/html",
        output_mime_type="text/html",
        allowed_mime_types=(
            "text/plain",
            "text/html",
        ),
        required=True,
    )

Is this a regression from the previous 6.1 alpha ? Or was it already broken there as well?

There could be a regression when getting vocabularies, for example in ClassicUI in some parts of the folder contents, or when editing a Collection. This is due to a change in plone.app.content.

If this affects you, you can use new plone.app.content 4.1.6.

I have updated https://dist.plone.org/release/6.1-dev/ with this and two other package updates: docutils = 0.21.2 and Products.PortalTransforms = 4.1.0.

Hi! Back from vacation :island:

I just updated my coredev-6.1 checkout (with two almost empty classicUI Plone sites installed a month ago) to the latest releases and get a strange traceback in ZMI menu on the left and on /Plone/manage_main:

Traceback (innermost last):
  Module ZPublisher.WSGIPublisher, line 181, in transaction_pubevents
  Module ZPublisher.WSGIPublisher, line 391, in publish_module
  Module ZPublisher.WSGIPublisher, line 285, in publish
  Module ZPublisher.mapply, line 98, in mapply
  Module ZPublisher.WSGIPublisher, line 68, in call_object
  Module Shared.DC.Scripts.Bindings, line 335, in __call__
  Module Shared.DC.Scripts.Bindings, line 372, in _bindAndExec
  Module Products.PageTemplates.PageTemplateFile, line 143, in _exec
  Module Products.PageTemplates.PageTemplate, line 81, in pt_render
  Module zope.pagetemplate.pagetemplate, line 134, in pt_render
  Module Products.PageTemplates.engine, line 365, in __call__
  Module z3c.pt.pagetemplate, line 174, in render
  Module chameleon.zpt.template, line 331, in render
  Module chameleon.template, line 217, in render
  Module chameleon.utils, line 20, in raise_with_traceback
  Module chameleon.template, line 193, in render
  Module f6bbd65cd28525bfdfd3434f67028deb, line 308, in render
  Module Products.PageTemplates.ZRPythonExpr, line 49, in __call__
   - __traceback_info__: here.manage_get_sortedObjects(sortkey = skey, revkey = rkey)
  Module PythonExpr, line 1, in <module>
  Module OFS.ObjectManager, line 818, in manage_get_sortedObjects
  Module ZTUtils.Lazy, line 197, in __getitem__
  Module plone.folder.ordered, line 104, in <lambda>
  Module plone.folder.ordered, line 66, in _getOb
  Module Products.BTreeFolder2.BTreeFolder2, line 218, in _getOb
AttributeError: 'PropertiesTool' object has no attribute '__of__'. Did you mean: '__doc__'?

 - Expression: "   obs python: here.manage_get_sortedObjects(sortkey = skey, revkey "
 - Filename:   manage_main
 - Location:   (line 14: col 17)
 - Arguments:  template: <PageTemplateFile at /Plone1/main>
               here: <PloneSite at /Plone1>
               context: <PloneSite at /Plone1>
               container: <PloneSite at /Plone1>
               nothing: None
               options: {'args': ()}
               root: <Application at >
               request: <WSGIRequest, URL=http://localhost:8080/Plone1/manage_main>
               modules: <Products.PageTemplates.ZRPythonExpr._SecureModuleImporter object at 0x104c735c0>
               user: <PropertiedUser 'admin'>
               default: <DEFAULT>
               repeat: <Products.PageTemplates.engine.RepeatDictWrapper object at 0x1167a9e10>
               loop: {}
               target_language: None
               translate: <function BaseTemplate.render.<locals>.translate at 0x116790c20>
               attrs: {'id': 'objectItems', 'name': 'objectItems', 'method': 'post', 'action': 'string:${request/URL1}/'}
               has_order_support: 0
               sm: <AccessControl.ImplC.SecurityManager object at 0x116734a60>
               default_sort: 'id'
               skey: 'id'
               rkey: 'asc'
               rkey_alt: 'desc'
               rkey_alt_up: 'DESC'

viewing the Plone sites is no problem...

And I've noticed that on the main @@plone-overview page, there is no more hint, that Plone needs to be updated ...

EDIT: the traceback is still there after upgrading the plone site configurations.

When you go to portal_setup, Upgrades tab, and select the Products.CMFPlone:plone profile, and click 'Show old upgrades', what is the last available upgrade step?

I expect an upgrade step group moving from 6102 to 6103. This should include a step "Remove the portal_properties tool."

Oh, I think I know what may have happened: at the end of June I did an "internal" CMFPlone release only on Index of /release/6.1-dev/. This already had metadata version 6103, but still had the properties tool. You probably created a Plone site with that version. Now with CMFPlone 6.1.0a4, it sees no difference in the metadata version, so it does not offer the upgrade.
So solution: run that upgrade step (or rather both steps within the group).

If you came from 6.1.0a3, this would not have happened.

Thanks @mauritsvanrees ... that was exactly the problem. Going to the upgrade steps I only saw 6103 -> 6104 so I probably had your mentioned version installed. running all steps 6102 -> 6104 manually fixes the traceback.

I think it was a regression from previous 6.1a version. My robot test works with 6.0.12 like expected, but if i upgrade to 6.1.0a1, then the error occurs. I don't know like the "value" come from the tinymce iframe to the hidden textarea of the widget. I assume it's a broken click event? @petschki what do you think?

Next Bug? the form in the view select_default_page has no items for a proper selection.

context.absolute_url_path() delivers a wrong path for the catalog query, if i replace it with '/'.join(context.getPhysicalPath()), all works as expected.

I cannot reproduce this ... all selectable default_page_types appear correctly here.

Confirmed. The Tiny 5 implementation (Plone 6.0.x) behaves differently in that case than the Tiny 7 implementation in Plone 6.1 ... I'll try to take a look a this asap.

OK some progress: This is due to the new z3cform textarea implementation which introduces the required parameter for the richtext field textarea now. In Plone 6.0 the plone.app.textfield markup ignored this parameter and only validated required in the backend.

So thats further why pat-validation deactivates the save button now if a required richtextfield has no input. hmmm...

Since the tinymce implementation triggers the value saving event on form submit (which I'm not even shure if we need it anyway) we're stuck now. I think it would be best to refactor pat-tinymce to save the value on blur event which would trigger pat-validation again and should fix this problem. I'll give this a try.

EDIT: I've created an issue: required `pat-tinymce` leads to unsaveable forms. · Issue #1390 · plone/mockup · GitHub

1 Like

Have you tested this with a VHM config? It happens only with VHM infront of Plone.

No ... this is pure buildout.coredev 6.1 -> I've manually edited the richtext behavior to be required so this can be tested in the default page. No chance to save when validation error is on textfield.