plone / Products.CMFPlone

The core of the Plone content management system
https://plone.org
GNU General Public License v2.0
248 stars 188 forks source link

Collection "Event End Date: after today" criterion error #179 #3959

Closed sauzher closed 1 month ago

sauzher commented 4 months ago

Steps to reproduce:

immagine

Got Traceback error.

In plone 6 it is:


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 zope.browserpage.simpleviewclass, line 44, in __call__
  Module Products.Five.browser.pagetemplatefile, line 126, in __call__
  Module Products.Five.browser.pagetemplatefile, line 58, in __call__
  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 03d50a5f689152d843637e4b137fc230, line 1067, in render
  Module ede39b9b0fe0206938a0ec2cc61ca09d, line 930, in render_master
  Module ede39b9b0fe0206938a0ec2cc61ca09d, line 1553, in render_content
  Module 03d50a5f689152d843637e4b137fc230, line 1052, in __fill_content_core
  Module 03d50a5f689152d843637e4b137fc230, line 140, in render_content_core
  Module zope.tales.expressions, line 248, in __call__
  Module Products.PageTemplates.Expressions, line 221, in _eval
  Module Products.PageTemplates.Expressions, line 152, in render
  Module plone.memoize.view, line 50, in memogetter
  Module plone.app.event.browser.event_listing, line 166, in events
  Module plone.app.event.base, line 286, in expand_events
  Module DateTime.DateTime, line 1360, in lessThanEqualTo
AttributeError: 'datetime.datetime' object has no attribute '_micros'

 - Expression: "view/events"
 - Filename:   ... 1/site-packages/plone/app/event/browser/event_listing.pt
 - Location:   (line 74: col 25)
 - Source:     batch view/events;
                     ^^^^^^^^^^^
 - Expression: "provider:plone.abovecontentbody"
 - Filename:   ... ges/Products/CMFPlone/browser/templates/main_template.pt
 - Location:   (line 107: col 74)
 - Source:     ... ontent="structure provider:plone.abovecontentbody" />
                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 - Expression: "context/main_template/macros/master"
 - Filename:   ... 1/site-packages/plone/app/event/browser/event_listing.pt
 - Location:   (line 6: col 23)
 - Source:     ... etal:use-macro="context/main_template/macros/master"
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 - Arguments:  template: <Products.Five.browser.pagetemplatefile.ViewPageTemplateFile object at 0x7f4b95259010>
               options: {}
               args: ()
               nothing: None
               modules: <Products.PageTemplates.ZRPythonExpr._SecureModuleImporter object at 0x7f4b9cbec190>
               request: <WSGIRequest, URL=https://classic.demo.plone.org/en/eventi/eventi/event_listing>
               view: <Products.Five.browser.metaconfigure.SimpleViewClass from /app/lib/python3.11/site-packages/plone/app/event/browser/event_listing.pt object at 0x7f4b97571d10>
               context: <Collection at /Plone/en/eventi/eventi>
               views: <Products.Five.browser.pagetemplatefile.ViewMapper object at 0x7f4b94e61090>
               here: <Collection at /Plone/en/eventi/eventi>
               container: <Collection at /Plone/en/eventi/eventi>
               root: <Application at >
               traverse_subpath: []
               user: <PloneUser 'manager'>
               default: <DEFAULT>
               repeat: <Products.PageTemplates.engine.RepeatDictWrapper object at 0x7f4b9761d950>
               loop: {}
               target_language: None
               translate: <function BaseTemplate.render.<locals>.translate at 0x7f4b95498c20>
               macroname: 'master'
               attrs: {}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 zope.browserpage.simpleviewclass, line 44, in __call__
  Module Products.Five.browser.pagetemplatefile, line 126, in __call__
  Module Products.Five.browser.pagetemplatefile, line 58, in __call__
  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 03d50a5f689152d843637e4b137fc230, line 1067, in render
  Module ede39b9b0fe0206938a0ec2cc61ca09d, line 930, in render_master
  Module ede39b9b0fe0206938a0ec2cc61ca09d, line 1553, in render_content
  Module 03d50a5f689152d843637e4b137fc230, line 1052, in __fill_content_core
  Module 03d50a5f689152d843637e4b137fc230, line 140, in render_content_core
  Module zope.tales.expressions, line 248, in __call__
  Module Products.PageTemplates.Expressions, line 221, in _eval
  Module Products.PageTemplates.Expressions, line 152, in render
  Module plone.memoize.view, line 50, in memogetter
  Module plone.app.event.browser.event_listing, line 166, in events
  Module plone.app.event.base, line 286, in expand_events
  Module DateTime.DateTime, line 1360, in lessThanEqualTo
AttributeError: 'datetime.datetime' object has no attribute '_micros'

 - Expression: "view/events"
 - Filename:   ... 1/site-packages/plone/app/event/browser/event_listing.pt
 - Location:   (line 74: col 25)
 - Source:     batch view/events;
                     ^^^^^^^^^^^
 - Expression: "provider:plone.abovecontentbody"
 - Filename:   ... ges/Products/CMFPlone/browser/templates/main_template.pt
 - Location:   (line 107: col 74)
 - Source:     ... ontent="structure provider:plone.abovecontentbody" />
                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 - Expression: "context/main_template/macros/master"
 - Filename:   ... 1/site-packages/plone/app/event/browser/event_listing.pt
 - Location:   (line 6: col 23)
 - Source:     ... etal:use-macro="context/main_template/macros/master"
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 - Arguments:  template: <Products.Five.browser.pagetemplatefile.ViewPageTemplateFile object at 0x7f4b95259010>
               options: {}
               args: ()
               nothing: None
               modules: <Products.PageTemplates.ZRPythonExpr._SecureModuleImporter object at 0x7f4b9cbec190>
               request: <WSGIRequest, URL=https://classic.demo.plone.org/en/eventi/eventi/event_listing>
               view: <Products.Five.browser.metaconfigure.SimpleViewClass from /app/lib/python3.11/site-packages/plone/app/event/browser/event_listing.pt object at 0x7f4b97571d10>
               context: <Collection at /Plone/en/eventi/eventi>
               views: <Products.Five.browser.pagetemplatefile.ViewMapper object at 0x7f4b94e61090>
               here: <Collection at /Plone/en/eventi/eventi>
               container: <Collection at /Plone/en/eventi/eventi>
               root: <Application at >
               traverse_subpath: []
               user: <PloneUser 'manager'>
               default: <DEFAULT>
               repeat: <Products.PageTemplates.engine.RepeatDictWrapper object at 0x7f4b9761d950>
               loop: {}
               target_language: None
               translate: <function BaseTemplate.render.<locals>.translate at 0x7f4b95498c20>
               macroname: 'master'
               attrs: {}

In plone 5 I get a slightly different error:

2024-05-15 16:36:13,422 ERROR   [Zope.SiteErrorLog:252][waitress-0] 1715783773.42113350.009147154423860493 http://localhost:8080/Plone/notizie-ed-eventi/eventi/eventi/event_listing
Traceback (innermost last):
  Module ZPublisher.WSGIPublisher, line 176, in transaction_pubevents
  Module ZPublisher.WSGIPublisher, line 385, in publish_module
  Module ZPublisher.WSGIPublisher, line 280, in publish
  Module ZPublisher.mapply, line 85, in mapply
  Module ZPublisher.WSGIPublisher, line 63, in call_object
  Module zope.browserpage.simpleviewclass, line 41, in __call__
  Module Products.Five.browser.pagetemplatefile, line 126, in __call__
  Module Products.Five.browser.pagetemplatefile, line 58, in __call__
  Module zope.pagetemplate.pagetemplate, line 133, in pt_render
  Module Products.PageTemplates.engine, line 378, in __call__
  Module z3c.pt.pagetemplate, line 176, in render
  Module chameleon.zpt.template, line 302, in render
  Module chameleon.template, line 215, in render
  Module chameleon.utils, line 53, in raise_with_traceback
  Module chameleon.template, line 192, in render
  Module 71409d3e12ace82d54aa7064ff4d1c8c, line 1067, in render
  Module 418c64f173f7595aed1cc7b415aef440, line 904, in render_master
  Module 418c64f173f7595aed1cc7b415aef440, line 1540, in render_content
  Module 71409d3e12ace82d54aa7064ff4d1c8c, line 1052, in __fill_content_core
  Module 71409d3e12ace82d54aa7064ff4d1c8c, line 140, in render_content_core
  Module zope.tales.expressions, line 250, in __call__
  Module Products.PageTemplates.Expressions, line 225, in _eval
  Module Products.PageTemplates.Expressions, line 155, in render
  Module plone.memoize.view, line 59, in memogetter
  Module plone.app.event.browser.event_listing, line 166, in events
  Module plone.app.event.base, line 287, in expand_events
  Module DateTime.DateTime, line 1378, in lessThanEqualTo
TypeError: '<=' not supported between instances of 'int' and 'datetime.datetime
yurj commented 4 months ago

https://stackoverflow.com/a/7999959/15822654

https://github.com/plone/plone.app.event/blob/e248da7a4fdca292bd5331e8eb8d26597dd3226d/plone/app/event/recurrence.py#L85C32-L85C55

Maybe this?

davisagli commented 4 months ago

@sauzher This may have been fixed in https://github.com/zopefoundation/DateTime/pull/61. You didn't say a specific version of Plone or DateTime that you were using.

sauzher commented 4 months ago

@davisagli I'm facing the problem in plone 5.2.13, DateTime 4.9. but the same happens in Plone 6.0.11 (6022) and Plone 6.10 DateTime 5.3

Thanks.

stevepiercy commented 4 months ago

@sauzher it was fixed in DateTime 5.4, according to the last comment in the issue that @davisagli linked. The latest Plone constraints.txt file pins it to 5.3. I assume if you install DateTime 5.4, then it will work for latest Plone.

sauzher commented 4 months ago

@davisagli @stevepiercy , unfortunately even pinning DateTime = 5.4 it doesn't solve. The traceback seems to be the same:

Traceback (innermost last):
  Module ZPublisher.WSGIPublisher, line 176, in transaction_pubevents
  Module ZPublisher.WSGIPublisher, line 385, in publish_module
  Module ZPublisher.WSGIPublisher, line 280, in publish
  Module ZPublisher.mapply, line 85, in mapply
  Module ZPublisher.WSGIPublisher, line 63, in call_object
  Module zope.browserpage.simpleviewclass, line 41, in __call__
  Module Products.Five.browser.pagetemplatefile, line 126, in __call__
  Module Products.Five.browser.pagetemplatefile, line 58, in __call__
  Module zope.pagetemplate.pagetemplate, line 133, in pt_render
  Module Products.PageTemplates.engine, line 378, in __call__
  Module z3c.pt.pagetemplate, line 176, in render
  Module chameleon.zpt.template, line 302, in render
  Module chameleon.template, line 215, in render
  Module chameleon.utils, line 53, in raise_with_traceback
  Module chameleon.template, line 192, in render
  Module c4d8b9e8c20076ed60bfb79b703e4984, line 1059, in render
  Module 20728d413d4a6300597bce6859f44302, line 904, in render_master
  Module 20728d413d4a6300597bce6859f44302, line 1540, in render_content
  Module c4d8b9e8c20076ed60bfb79b703e4984, line 1044, in __fill_content_core
  Module c4d8b9e8c20076ed60bfb79b703e4984, line 138, in render_content_core
  Module zope.tales.expressions, line 250, in __call__
  Module Products.PageTemplates.Expressions, line 225, in _eval
  Module Products.PageTemplates.Expressions, line 155, in render
  Module plone.memoize.view, line 59, in memogetter
  Module plone.app.event.browser.event_listing, line 171, in events
  Module plone.app.event.base, line 285, in expand_events
  Module DateTime.DateTime, line 1370, in lessThanEqualTo
TypeError: '<=' not supported between instances of 'int' and 'datetime.datetime'
davisagli commented 4 months ago

@sauzher Based on the traceback, it looks like a datetime instance was passed in to DateTime.lessThanEqualTo.

Based on the docstring in https://github.com/zopefoundation/DateTime/blob/5.4/src/DateTime/DateTime.py#L1352, it expects a DateTime instance or a float.

So I guess the bug is that plone.app.event is passing the wrong type.

sauzher commented 4 months ago

@davisagli I agree, actually I've monkey patched plone.app.events.base.expand_events casting into DateTime all the operands. Not so clean but it's ok for our Plones.

petschki commented 1 month ago

expand_events requires a list of IEvent objects or IEventAccessor object wrappers (see https://github.com/plone/plone.app.event/blob/master/plone/app/event/base.py#L253) .. this is what you get from get_events with ret_mode 2 (=objects) or 3 (=accessors) https://github.com/plone/plone.app.event/blob/master/plone/app/event/base.py#L74 ... you need the objects to calculate recurring event occurrences between date ranges ... i would investigate, why the ret_mode here https://github.com/plone/plone.app.event/blob/master/plone/app/event/browser/event_listing.py#L168 is not as expected ...

petschki commented 1 month ago

ok it's not the ret_mode but the collections query: afterToday returns a DateTime object but plone.app.event.base.expand_events expects a datetime.datetime object.

I think it would be best if this method https://github.com/plone/plone.app.event/blob/master/plone/app/event/browser/event_listing.py#L217 always returns datetime objects as expected ...

petschki commented 1 month ago

This one adds a test and fixes this issue: https://github.com/plone/plone.app.event/pull/404

Though I saw this older PR (too late) trying to achieve the same thing: https://github.com/plone/plone.app.event/pull/397 ... sorry @ThibautBorn maybe you want to look at my PR and we can merge our solutions together?

ThibautBorn commented 1 month ago

@petschki , Your fix achieved the same thing as my PR for the conversion part, and with tests so I'm glad it's merged.

I was however also expanding on the usecase by refactoring the code and implementing some new logic. This isn't addressed here, so I made a new issue where this can be discussed. https://github.com/plone/plone.app.event/issues/405