Tracker log

An overview of recent activity in the tracker.

Mikko Ohtamaa added a new response to »Cannot uninstall or access control panel tabs«:

Monkey-patch to work around the issue:


    from Products.CacheSetup.content.base_cache_rule import BaseCacheRule

    def getVaryExpression(self):
        expression = self.getField('varyExpression').get(self)
        if expression and hasattr(expression, "text"):
            return expression.text
        if expression:
            return expression
        
    BaseCacheRule.getVaryExpression = getVaryExpression

Added 3 day(s) ago.

New issue »Cannot uninstall or access control panel tabs« added by Mikko Ohtamaa

Reinstall error traceback:

Traceback (innermost last):
      Module ZPublisher.Publish, line 119, in publish
      Module ZPublisher.mapply, line 88, in mapply
      Module ZPublisher.Publish, line 42, in call_object
      Module <string>, line 6, in _facade
      Module AccessControl.requestmethod, line 64, in _curried
      Module Products.CMFQuickInstallerTool.QuickInstallerTool, line 648, in reinstallProducts
      Module Products.CMFQuickInstallerTool.QuickInstallerTool, line 589, in installProducts
      Module Products.CMFQuickInstallerTool.QuickInstallerTool, line 512, in installProduct
       - __traceback_info__: ('CacheSetup',)
      Module Products.ExternalMethod.ExternalMethod, line 231, in __call__
       - __traceback_info__: ((<PloneSite at /hotellilevitunturi>,), {'reinstall': True}, (False,))
      Module /fast/levi/eggs/Products.CacheSetup-1.2.1-py2.4.egg/Products/CacheSetup/Extensions/Install.py, line 32, in install
      Module Products.CacheSetup.Extensions.utils, line 178, in updateSchemas
      Module Products.ZCatalog.ZCatalog, line 813, in ZopeFindAndApply
      Module Products.ZCatalog.ZCatalog, line 813, in ZopeFindAndApply
      Module Products.ZCatalog.ZCatalog, line 801, in ZopeFindAndApply
      Module Products.CacheSetup.Extensions.utils, line 182, in _updateChangedSchema
      Module Products.Archetypes.BaseObject, line 878, in _updateSchema
      Module Products.Archetypes.Field, line 792, in getContentType
      Module Products.Archetypes.Field, line 731, in getRaw
      Module Products.Archetypes.utils, line 162, in mapply
      Module Products.CacheSetup.content.base_cache_rule, line 311, in getVaryExpression
    AttributeError: 'str' object has no attribute 'text'

Added 3 day(s) ago.

João Eduardo added a new response to »Products.CacheSetup incompatible with Zope 2.12«:

How to uninstall Products.CacheSetup from Plone 3 and then install migrate it do Plone 4.
Just removing the Product won't work.

Added 139 day(s) ago.

Youenn Boussard added a new response to »LinguaPlone (3.2) + CacheSetup crash zope server«:

Trace back before zserver crash

/Users/yboussard/.virtualenvs/dpldt/buildout/parts/zope2/lib/python/ZServer/PubCore/ZServerPublisher.py(25)__init__()
-> response=b)
  /Users/yboussard/.virtualenvs/dpldt/buildout/parts/zope2/lib/python/ZPublisher/Publish.py(401)publish_module()
-> environ, debug, request, response)
  /Users/yboussard/.virtualenvs/dpldt/buildout/parts/zope2/lib/python/ZPublisher/Publish.py(202)publish_module_standard()
-> response = publish(request, module_name, after_list, debug=debug)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.PDBDebugMode-1.3-py2.4.egg/Products/PDBDebugMode/runcall.py(83)pdb_publish()
-> mapply=mapply, )
  /Users/yboussard/.virtualenvs/dpldt/buildout/parts/zope2/lib/python/ZPublisher/Publish.py(110)publish()
-> object=request.traverse(path, validated_hook=validated_hook)
  /Users/yboussard/.virtualenvs/dpldt/buildout/parts/zope2/lib/python/ZPublisher/BaseRequest.py(429)traverse()
-> bpth(object, self)
  /Users/yboussard/.virtualenvs/dpldt/buildout/parts/zope2/lib/python/ZPublisher/BeforeTraverse.py(105)__call__()
-> cob(container, request)
  /Users/yboussard/.virtualenvs/dpldt/buildout/parts/zope2/lib/python/ZPublisher/BeforeTraverse.py(145)__call__()
-> meth(*(container, request, None)[:args])
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.PloneLanguageTool-3.0.3-py2.4.egg/Products/PloneLanguageTool/LanguageTool.py(99)__call__()
-> self.setLanguageBindings()
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.PloneLanguageTool-3.0.3-py2.4.egg/Products/PloneLanguageTool/LanguageTool.py(527)setLanguageBindings()
-> useCcTLD, useSubdomain, authOnly)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.PloneLanguageTool-3.0.3-py2.4.egg/Products/PloneLanguageTool/LanguageTool.py(624)setLanguageBindings()
-> langsContent = [self.tool.getContentLanguage()]
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.PloneLanguageTool-3.0.3-py2.4.egg/Products/PloneLanguageTool/LanguageTool.py(407)getContentLanguage()
-> obj = self.unrestrictedTraverse(contentpath, None)
  /Users/yboussard/.virtualenvs/dpldt/buildout/parts/zope2/lib/python/OFS/Traversable.py(202)unrestrictedTraverse()
-> next = bobo_traverse(REQUEST, name)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.ResourceRegistries-1.5.4.1-py2.4.egg/Products/ResourceRegistries/tools/BaseRegistry.py(197)__bobo_traverse__()
-> parent.deferredGetContent(deferred, name, self._skin)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.ResourceRegistries-1.5.4.1-py2.4.egg/Products/ResourceRegistries/tools/BaseRegistry.py(269)deferredGetContent()
-> data = self.__getitem__(name)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.ResourceRegistries-1.5.4.1-py2.4.egg/Products/ResourceRegistries/tools/BaseRegistry.py(240)__getitem__()
-> output = self.getResourceContent(item, self, original)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.ResourceRegistries-1.5.4.1-py2.4.egg/Products/ResourceRegistries/tools/JSRegistry.py(252)getResourceContent()
-> output = BaseRegistryTool.getResourceContent(self, item, context, original)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.ResourceRegistries-1.5.4.1-py2.4.egg/Products/ResourceRegistries/tools/BaseRegistry.py(628)getResourceContent()
-> content = obj(self.REQUEST, self.REQUEST.RESPONSE)
  /Users/yboussard/.virtualenvs/dpldt/buildout/parts/zope2/lib/python/Shared/DC/Scripts/Bindings.py(313)__call__()
-> return self._bindAndExec(args, kw, None)
  /Users/yboussard/.virtualenvs/dpldt/buildout/parts/zope2/lib/python/Shared/DC/Scripts/Bindings.py(350)_bindAndExec()
-> return self._exec(bound_data, args, kw)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.CMFCore-2.1.2-py2.4.egg/Products/CMFCore/FSPageTemplate.py(216)_exec()
-> result = self.pt_render(extra_context=bound_names)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.CacheSetup-1.2.1-py2.4.egg/Products/CacheSetup/patch_cmf.py(38)FSPT_pt_render()
-> (rule, header_set) = pcs.getRuleAndHeaderSet(request, object, view, member)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.CacheSetup-1.2.1-py2.4.egg/Products/CacheSetup/content/cache_tool.py(620)getRuleAndHeaderSet()
-> header_set = rule.getHeaderSet(request, object, view, member)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.CacheSetup-1.2.1-py2.4.egg/Products/CacheSetup/content/content_cache_rule.py(151)getHeaderSet()
-> if view not in self.getTemplates() and \
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.CacheSetup-1.2.1-py2.4.egg/Products/CacheSetup/content/base_cache_rule.py(395)getObjectDefaultView()
-> return browserDefault.defaultView()
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.CMFDynamicViewFTI-3.0.2-py2.4.egg/Products/CMFDynamicViewFTI/browserdefault.py(69)defaultView()
-> return fti.defaultView(self)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.CMFDynamicViewFTI-3.0.2-py2.4.egg/Products/CMFDynamicViewFTI/fti.py(188)defaultView()
-> obj, path = plone_utils.browserDefault(context)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Plone-3.3.5-py2.4.egg/Products/CMFPlone/PloneTool.py(822)browserDefault()
-> defaultPage = self.getDefaultPage(obj)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Plone-3.3.5-py2.4.egg/Products/CMFPlone/PloneTool.py(655)getDefaultPage()
-> return utils.getDefaultPage(obj, request)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Plone-3.3.5-py2.4.egg/Products/CMFPlone/utils.py(110)getDefaultPage()
-> return view.getDefaultPage()
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/plone.app.layout-1.2.6-py2.4.egg/plone/app/layout/navigation/defaultpage.py(32)getDefaultPage()
-> return getDefaultPage(aq_inner(self.context))
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/plone.app.layout-1.2.6-py2.4.egg/plone/app/layout/navigation/defaultpage.py(91)getDefaultPage()
-> return lookupTranslationId(context, page)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/plone.app.layout-1.2.6-py2.4.egg/plone/app/layout/navigation/defaultpage.py(76)lookupTranslationId()
-> return utils.lookupTranslationId(obj, page, ids)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Plone-3.3.5-py2.4.egg/Products/CMFPlone/utils.py(145)lookupTranslationId()
-> translation = pageobj.getTranslation()
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.LinguaPlone-3.2-py2.4.egg/Products/LinguaPlone/I18NBaseObject.py(146)getTranslation()
-> language = language_tool.getPreferredLanguage()
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.PloneLanguageTool-3.0.3-py2.4.egg/Products/PloneLanguageTool/LanguageTool.py(353)getPreferredLanguage()
-> l = self.getLanguageBindings()
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.PloneLanguageTool-3.0.3-py2.4.egg/Products/PloneLanguageTool/LanguageTool.py(546)getLanguageBindings()
-> self.setLanguageBindings()
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.PloneLanguageTool-3.0.3-py2.4.egg/Products/PloneLanguageTool/LanguageTool.py(527)setLanguageBindings()
-> useCcTLD, useSubdomain, authOnly)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.PloneLanguageTool-3.0.3-py2.4.egg/Products/PloneLanguageTool/LanguageTool.py(624)setLanguageBindings()
-> langsContent = [self.tool.getContentLanguage()]
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.PloneLanguageTool-3.0.3-py2.4.egg/Products/PloneLanguageTool/LanguageTool.py(407)getContentLanguage()
-> obj = self.unrestrictedTraverse(contentpath, None)
  /Users/yboussard/.virtualenvs/dpldt/buildout/parts/zope2/lib/python/OFS/Traversable.py(202)unrestrictedTraverse()
-> next = bobo_traverse(REQUEST, name)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.ResourceRegistries-1.5.4.1-py2.4.egg/Products/ResourceRegistries/tools/BaseRegistry.py(197)__bobo_traverse__()
-> parent.deferredGetContent(deferred, name, self._skin)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.ResourceRegistries-1.5.4.1-py2.4.egg/Products/ResourceRegistries/tools/BaseRegistry.py(269)deferredGetContent()
-> data = self.__getitem__(name)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.ResourceRegistries-1.5.4.1-py2.4.egg/Products/ResourceRegistries/tools/BaseRegistry.py(240)__getitem__()
-> output = self.getResourceContent(item, self, original)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.ResourceRegistries-1.5.4.1-py2.4.egg/Products/ResourceRegistries/tools/JSRegistry.py(252)getResourceContent()
-> output = BaseRegistryTool.getResourceContent(self, item, context, original)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.ResourceRegistries-1.5.4.1-py2.4.egg/Products/ResourceRegistries/tools/BaseRegistry.py(628)getResourceContent()
-> content = obj(self.REQUEST, self.REQUEST.RESPONSE)
  /Users/yboussard/.virtualenvs/dpldt/buildout/parts/zope2/lib/python/Shared/DC/Scripts/Bindings.py(313)__call__()
-> return self._bindAndExec(args, kw, None)
  /Users/yboussard/.virtualenvs/dpldt/buildout/parts/zope2/lib/python/Shared/DC/Scripts/Bindings.py(350)_bindAndExec()
-> return self._exec(bound_data, args, kw)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.CMFCore-2.1.2-py2.4.egg/Products/CMFCore/FSPageTemplate.py(216)_exec()
-> result = self.pt_render(extra_context=bound_names)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.CacheSetup-1.2.1-py2.4.egg/Products/CacheSetup/patch_cmf.py(38)FSPT_pt_render()
-> (rule, header_set) = pcs.getRuleAndHeaderSet(request, object, view, member)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.CacheSetup-1.2.1-py2.4.egg/Products/CacheSetup/content/cache_tool.py(620)getRuleAndHeaderSet()
-> header_set = rule.getHeaderSet(request, object, view, member)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.CacheSetup-1.2.1-py2.4.egg/Products/CacheSetup/content/content_cache_rule.py(151)getHeaderSet()
-> if view not in self.getTemplates() and \
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.CacheSetup-1.2.1-py2.4.egg/Products/CacheSetup/content/base_cache_rule.py(395)getObjectDefaultView()
-> return browserDefault.defaultView()
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.CMFDynamicViewFTI-3.0.2-py2.4.egg/Products/CMFDynamicViewFTI/browserdefault.py(69)defaultView()
-> return fti.defaultView(self)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.CMFDynamicViewFTI-3.0.2-py2.4.egg/Products/CMFDynamicViewFTI/fti.py(188)defaultView()
-> obj, path = plone_utils.browserDefault(context)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Plone-3.3.5-py2.4.egg/Products/CMFPlone/PloneTool.py(822)browserDefault()
-> defaultPage = self.getDefaultPage(obj)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Plone-3.3.5-py2.4.egg/Products/CMFPlone/PloneTool.py(655)getDefaultPage()
-> return utils.getDefaultPage(obj, request)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Plone-3.3.5-py2.4.egg/Products/CMFPlone/utils.py(110)getDefaultPage()
-> return view.getDefaultPage()
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/plone.app.layout-1.2.6-py2.4.egg/plone/app/layout/navigation/defaultpage.py(32)getDefaultPage()
-> return getDefaultPage(aq_inner(self.context))
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/plone.app.layout-1.2.6-py2.4.egg/plone/app/layout/navigation/defaultpage.py(91)getDefaultPage()
-> return lookupTranslationId(context, page)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/plone.app.layout-1.2.6-py2.4.egg/plone/app/layout/navigation/defaultpage.py(76)lookupTranslationId()
-> return utils.lookupTranslationId(obj, page, ids)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Plone-3.3.5-py2.4.egg/Products/CMFPlone/utils.py(145)lookupTranslationId()
-> translation = pageobj.getTranslation()
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.LinguaPlone-3.2-py2.4.egg/Products/LinguaPlone/I18NBaseObject.py(146)getTranslation()
-> language = language_tool.getPreferredLanguage()
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.PloneLanguageTool-3.0.3-py2.4.egg/Products/PloneLanguageTool/LanguageTool.py(353)getPreferredLanguage()
-> l = self.getLanguageBindings()
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.PloneLanguageTool-3.0.3-py2.4.egg/Products/PloneLanguageTool/LanguageTool.py(546)getLanguageBindings()
-> self.setLanguageBindings()
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.PloneLanguageTool-3.0.3-py2.4.egg/Products/PloneLanguageTool/LanguageTool.py(527)setLanguageBindings()
-> useCcTLD, useSubdomain, authOnly)
  /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.PloneLanguageTool-3.0.3-py2.4.egg/Products/PloneLanguageTool/LanguageTool.py(624)setLanguageBindings()
-> langsContent = [self.tool.getContentLanguage()]
> /Users/yboussard/.virtualenvs/dpldt/buildout/eggs/Products.PloneLanguageTool-3.0.3-py2.4.egg/Products/PloneLanguageTool/LanguageTool.py(407)getContentLanguage()
-> obj = self.unrestrictedTraverse(contentpath, None)

Added 310 day(s) ago.

New issue »LinguaPlone (3.2) + CacheSetup crash zope server« added by Youenn Boussard

When CacheSetup is enabled, LinguaPlone cause an infinite loop and zope core dump
Its occur when cache tool emit header of css registry file.

Products.CacheSetup.content.cache_tool.getRuleAndHeaderSet call Products.LinguaPlone.I18NBaseObject.getTranslation wich call Products.PloneLanguageTool.getContentLanguage and
getContentLanguage do an unrestrictedTraverse on css path wich cause the infinite loop.

I don't know that is a CacheFu bug or a LinguaPlone bug.. I open an issue also in LinguaPlone tracker.
For information,I try to make a patch to solve this bug.
if I succeeded I would tell you.

Added 310 day(s) ago.

New issue »CacheFu breaks translate.py on Plone 3.3.x« added by Marlon Richert

About a day after installing Products.CacheSetup, translate.py no longer functions on Plone 3.3.x. This causes several page templates to fail as follows:

RuntimeError: /opt/plone/buildout-cache/eggs/plone-3.3.5-py2.4.egg/Products/CMFPlone/skins/plone_scripts/translate.py has errors.

Confirmation from other sources:
* https://dev.plone.org/old/plone/ticket/11263
* http://plone.293351.n2.nabb[…]y-has-errors-td4906120.html
* http://pastebin.com/7pNkDy4b

Added 449 day(s) ago.

Rafael Rocha added a new response to »Products.CacheSetup incompatible with Zope 2.12«:

I have the same problem with Plone 4.0b3 My traceback in the same link above..

Added 608 day(s) ago.

New issue »Products.CacheSetup incompatible with Zope 2.12« added by Jan Ulrich Hasecke

If you install Products.CacheSetup with Plone 4 b2 Zope does not start.

Traceback here:

https://dev.plone.org/plone/ticket/10431

Added 666 day(s) ago.

New issue »testing email notifications... ignore« added by Ricardo Newbery

delete this

Added 687 day(s) ago.

Ricardo Newbery added a new response to »Expires header with httpcache fixed in the past causing client to send unwanted HEAD requests«:

> "The response Cache-Control header overrides
> the Expires semantics" - according to the HTTP
> spec this is true but this isn't how Firefox
> 3.0 or 3.5 are behaving. They keep requesting
> the icons on every request. e.g. ...

Interesting. If that is the case, then this should be fixed. But regardless of browser bugs, wrong expires header should be fixed anyway, if for no other reason than it's annoying. But I'm not seeing this. The expires calculation looks fine in my test rig. Can you reproduce this with a virgin Zope/Plone/CacheFu install?


> The problem with Zope returning a 304 is
> that the expires header never gets updated
> in the Apache cached version which in turns
> means Firefox keeps requesting the icon
> each time.

Also interesting. The specs are little iffy in this case but logically a 304 response does not need to have an updated Expires header in the case where the original response includes an overriding Cache-Control. The only caches that could theoretically be confused by this are the ones that only support HTTP/1.0, in which case these old caches also don't understand conditional GETs so the issue is moot.

To summarize, in the presence of Cache-Control overrides, it's not the responsibility of the origin server to keep the downstream expirations updated, that's a job for the caches downstream. If any proxies/browsers are doing this wrong, it's a bug on their end.


> "Incidentally, during a force refresh,
> your browser is probably not issuing an
> actual HEAD request" - What I said was that
> Apache sends a HEAD request to Zope,
> not the client.

Still the same. I doubt that Apache sends a HEAD request, it's probably just a conditional GET. The log entry in the original post seems to confirm this.

Added 716 day(s) ago.

Anthony Gerrard added a new response to »Expires header with httpcache fixed in the past causing client to send unwanted HEAD requests«:

I wouldn't be surprised if I am mixing stuff up. In response to some of your points:

"The response Cache-Control header overrides the Expires semantics" - according to the HTTP spec this is true but this isn't how Firefox 3.0 or 3.5 are behaving. They keep requesting the icons on every request. e.g.

Request Headers
Host www.twotalk.org
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.18) Gecko/2010020220 Firefox/3.0.18 GTB6 (.NET CLR 3.5.30729)
Accept image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language en-gb,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
Connection keep-alive
Referer http://www.twotalk.org/
If-Modified-Since Sat, 19 Dec 2009 06:49:01 GMT

Response Headers
Date Tue, 23 Feb 2010 08:58:23 GMT
Server Apache/2.2
Connection Keep-Alive
Keep-Alive timeout=15, max=95
Expires Thu, 21 Jan 2010 00:53:06 GMT
Cache-Control max-age=86400, s-maxage=86400, public, must-revalidate, proxy-revalidate

The problem with Zope returning a 304 is that the expires header never gets updated in the Apache cached version which in turns means Firefox keeps requesting the icon each time. This seems to be fixed in Firefox 3.6. I hadn't realised this was a client issue until now and I've checked IE and that behaves correctly.

"Incidentally, during a force refresh, your browser is probably not issuing an actual HEAD request" - What I said was that Apache sends a HEAD request to Zope, not the client. This means the expires header never gets updated so old Firefox versions keep sending an if-modified-since request.

When Apache sends the HEAD request to Zope then does the 304 response Zope sends back include an upated Expires header? If not then I think this is still a bug but given the release of Firefox 3.6 its impact is diminishing

Added 717 day(s) ago.

Ricardo Newbery added a new response to »Expires header with httpcache fixed in the past causing client to send unwanted HEAD requests«:

You're mixing up two different behaviors here. Let's discuss them in reverse order...

Zope does not recognize cache-control in the request. In general, there is no need to do so as Zope is generally smart enough to decide on it's own whether a 304 response is adequate enough. Request cache-control is usually best used to punch through browser and proxy caches, not to change the origin server behavior.

Incidentally, during a force refresh, your browser is probably not issuing an actual HEAD request but rather a regular GET request with conditional headers and the "Cache-Control: no-cache" header.

The other issue -- "expires header in the past" -- seems misinterpreted. The response Cache-Control header overrides the Expires semantics so it seems unlikely that an expires in the past would cause this problem (although it's still worth looking into why this is happening as the Expires header should be matching the Cache-Control, except in the max-age=0). So what is culprit here? I'm not sure as I don't see request/response headers for this issue (only the second issue). If I get some time soon, I'll try to reproduce this and see what I find.

Responsible manager: (UNASSIGNED)newbery.
Added 717 day(s) ago.

New issue »Squid purge on ATFile works only if we change the file type or object id/URL« added by Gilles Lenfant

Hi,

We run a Plone 2.1 and fel into the following issue :

The ATFile type uses the policy "Cache in proxy for 24 hours" for both anonymous and authenticated users.

* Add an ATFile
* Put a foo.xsl file in it

-> The public view shows "foo.xls", clicking the download link provides "foo.xls". So far so good

* Replace the file with "bar.xls"

-> The public view shows "bar.xls", but clicking the download link provides the former "foo.xls"

* Replace the file with "anything.pdf" or "anything.doc" (any extension except "xls").

-> The public view shows "anything.pdf", and clicking the download link provides the newest "anything.pdf".

So the purge works if we change of file type, but not if we change against a file of the same type.

Workaround: we can trigger the purge changing twice the id of the ATFile content object but this is not a long term fix since 20+ authors provide updated files this way and users have the URL in their bookmarks.

Thanks by advance.

Added 727 day(s) ago.

Graham Perrin added a new response to »Unable to delete policies.«:

Probably an echo of what's mentioned by Reinout, I can not delete from the top of the list at
/portal_cache_settings/without-caching-proxy/rules
the template cache rule with which I was playing.

> Forbidden: Form authenticator is invalid.

Added 745 day(s) ago.

Graham Perrin added a new response to »Products.CacheSetup with Plone 4.0a3«:

Detail of error.

Added 752 day(s) ago.

New issue »Products.CacheSetup with Plone 4.0a3« added by Graham Perrin

Aim:

* make a buildout .cfg from Plone 3.3.4 compatible with 4.0a3

Added 752 day(s) ago.

Philip Kilner added a new response to »weird install problem with cachesetup 1.2.1«:

Hi,

After some further experimentation, it seems that this is nothing to do with my upgrade.

Steps to reproduce: -
- Install Plone 3.3.1
- Uncomment the "Products.CacheSetup" line in the buildout.
- Run buildout.
- Start the cluster.
- Create a clean Plone site.
- Install Cache Setup (1.2.1)

I'm not using Squid (or any other purging proxy), and as far as I can tell CacheSetup is actually working fine - the only issue is the uggly error message in portal-quickinstaller, and the two instances of CMFSquidTool. One instance is "Products.CMFSquidTool", the other is just "CMFSQuidTool".

HTH

Regards,

PhilK

Added 847 day(s) ago.

Philip Kilner added a new response to »weird install problem with cachesetup 1.2.1«:

Hi Guys,

Just to say that I'm experincing the same issue.

In my case, I have done a clean Plone 3.3.1 install, and migrated the Data.fs from my old 3.1.7 instance.

Manuel, was yours an upgrade issue, or was this a clean install?

Have raised the issue on plone-users, and will update this ticket if I get anywhere there.

Cheers,

PhilK

Added 855 day(s) ago.

Guillaume Pellerin added a new response to »AttributeError: 'str' object has no attribute 'get'«:

The strange thing is that the same package is OK for other PloneSites in the same instance.

Maybe due to an older config/install of CacheFu ?

Added 858 day(s) ago.

New issue »AttributeError: 'str' object has no attribute 'get'« added by Guillaume Pellerin

2009-10-05 10:22:04
failed:
Traceback (most recent call last):

  File "/var/lib/zope2.9/instance/parisson.com/Products/CMFQuickInstallerTool/QuickInstallerTool.py", line 330, in installProduct
    res=install(portal, reinstall=reinstall)

  File "/usr/lib/zope2.9/lib/python/Products/ExternalMethod/ExternalMethod.py", line 225, in __call__
    try: return f(*args, **kw)

  File "/var/lib/zope2.9/instance/parisson.com/Products/CacheSetup/Extensions/Install.py", line 18, in install
    installTypes(self, out, listTypes(config.PROJECT_NAME), config.PROJECT_NAME, refresh_references=0)

  File "/var/lib/zope2.9/instance/parisson.com/Products/Archetypes/Extensions/utils.py", line 492, in installTypes
    ftypes = filterTypes(self, out, types, package_name)

  File "/var/lib/zope2.9/instance/parisson.com/Products/Archetypes/Extensions/utils.py", line 414, in filterTypes
    info = typesTool.listDefaultTypeInformation()

  File "/var/lib/zope2.9/instance/parisson.com/Products/CMFCore/TypesTool.py", line 721, in listDefaultTypeInformation
    mt = fti.get('meta_type', None)

AttributeError: 'str' object has no attribute 'get'

Added 858 day(s) ago.