Commit dc1185bc authored by Tres Seaver's avatar Tres Seaver

Merge pull request #45 from zopefoundation/thet-zope4

Fix two issues
parents c843a701 ef457af8
...@@ -11,6 +11,14 @@ http://docs.zope.org/zope2/ ...@@ -11,6 +11,14 @@ http://docs.zope.org/zope2/
Bugs Fixed Bugs Fixed
++++++++++ ++++++++++
- bobo_traverse of ProductDispatcher did not correctly invalidate cache
when a product was not initializes after first access of the cache. Types
that were added in test-profiles were not useable.
[pbauer, jensens]
- Fix pt_editForm after the help-system was removed.
[pbauer]
- Skipped ipv6 test on Travis, because Travis no longer supports this. - Skipped ipv6 test on Travis, because Travis no longer supports this.
- LP #789863: Ensure that Request objects cannot be published / traversed - LP #789863: Ensure that Request objects cannot be published / traversed
......
...@@ -79,8 +79,8 @@ class ProductDispatcher(Implicit): ...@@ -79,8 +79,8 @@ class ProductDispatcher(Implicit):
# Try to get a custom dispatcher from a Python product # Try to get a custom dispatcher from a Python product
global _packages global _packages
try: try:
package = _packages.get(name, None) package = _packages[name]
except NameError: except (NameError, KeyError):
_packages = _product_packages() _packages = _product_packages()
package = _packages.get(name, None) package = _packages.get(name, None)
......
...@@ -32,7 +32,7 @@ from OFS.History import Historical, html_diff ...@@ -32,7 +32,7 @@ from OFS.History import Historical, html_diff
from OFS.Cache import Cacheable from OFS.Cache import Cacheable
from OFS.Traversable import Traversable from OFS.Traversable import Traversable
from OFS.PropertyManager import PropertyManager from OFS.PropertyManager import PropertyManager
from Shared.DC.Scripts.Script import Script from Shared.DC.Scripts.Script import Script
from Shared.DC.Scripts.Signature import FuncCode from Shared.DC.Scripts.Signature import FuncCode
from webdav.Lockable import ResourceLockedError from webdav.Lockable import ResourceLockedError
...@@ -83,8 +83,7 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable, ...@@ -83,8 +83,7 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable,
'www', 'default.html') 'www', 'default.html')
manage_options = ( manage_options = (
{'label':'Edit', 'action':'pt_editForm', {'label':'Edit', 'action':'pt_editForm'},
'help': ('PageTemplates', 'PageTemplate_Edit.stx')},
{'label':'Test', 'action':'ZScriptHTML_tryForm'}, {'label':'Test', 'action':'ZScriptHTML_tryForm'},
) + PropertyManager.manage_options \ ) + PropertyManager.manage_options \
+ Historical.manage_options \ + Historical.manage_options \
...@@ -106,10 +105,10 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable, ...@@ -106,10 +105,10 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable,
security.declareProtected(view_management_screens, security.declareProtected(view_management_screens,
'read', 'ZScriptHTML_tryForm') 'read', 'ZScriptHTML_tryForm')
def __init__(self, id, text=None, content_type='text/html', strict=True, def __init__(self, id, text=None, content_type='text/html', strict=True,
output_encoding='utf-8'): output_encoding='utf-8'):
self.id = id self.id = id
self.expand = 0 self.expand = 0
self.ZBindings_edit(self._default_bindings) self.ZBindings_edit(self._default_bindings)
self.output_encoding = output_encoding self.output_encoding = output_encoding
# default content # default content
...@@ -123,7 +122,7 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable, ...@@ -123,7 +122,7 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable,
def pt_edit(self, text, content_type, keep_output_encoding=False): def pt_edit(self, text, content_type, keep_output_encoding=False):
text = text.strip() text = text.strip()
is_unicode = isinstance(text, unicode) is_unicode = isinstance(text, unicode)
encoding = None encoding = None
output_encoding = None output_encoding = None
...@@ -162,7 +161,7 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable, ...@@ -162,7 +161,7 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable,
preferred_encodings) preferred_encodings)
output_encoding = encoding output_encoding = encoding
# for content updated through WebDAV, FTP # for content updated through WebDAV, FTP
if not keep_output_encoding: if not keep_output_encoding:
self.output_encoding = output_encoding self.output_encoding = output_encoding
...@@ -191,7 +190,7 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable, ...@@ -191,7 +190,7 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable,
# The ZMI edit view uses utf-8! So we can safely assume # The ZMI edit view uses utf-8! So we can safely assume
# that 'title' and 'text' are utf-8 encoded strings - hopefully # that 'title' and 'text' are utf-8 encoded strings - hopefully
self.pt_setTitle(title, 'utf-8') self.pt_setTitle(title, 'utf-8')
text = unicode(text, 'utf-8') text = unicode(text, 'utf-8')
self.pt_edit(text, content_type, True) self.pt_edit(text, content_type, True)
...@@ -226,12 +225,12 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable, ...@@ -226,12 +225,12 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable,
filename = None filename = None
text = file text = file
else: else:
if not file: if not file:
raise ValueError('File not specified') raise ValueError('File not specified')
filename = file.filename filename = file.filename
text = file.read() text = file.read()
content_type = guess_type(filename, text) content_type = guess_type(filename, text)
# if not content_type in ('text/html', 'text/xml'): # if not content_type in ('text/html', 'text/xml'):
# raise ValueError('Unsupported mimetype: %s' % content_type) # raise ValueError('Unsupported mimetype: %s' % content_type)
...@@ -293,7 +292,7 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable, ...@@ -293,7 +292,7 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable,
def write(self, text): def write(self, text):
if not isinstance(text, unicode): if not isinstance(text, unicode):
text, encoding = convertToUnicode(text, text, encoding = convertToUnicode(text,
self.content_type, self.content_type,
preferred_encodings) preferred_encodings)
self.output_encoding = encoding self.output_encoding = encoding
...@@ -350,7 +349,7 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable, ...@@ -350,7 +349,7 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable,
self.dav__init(REQUEST, RESPONSE) self.dav__init(REQUEST, RESPONSE)
self.dav__simpleifhandler(REQUEST, RESPONSE, refresh=1) self.dav__simpleifhandler(REQUEST, RESPONSE, refresh=1)
text = REQUEST.get('BODY', '') text = REQUEST.get('BODY', '')
content_type = guess_type('', text) content_type = guess_type('', text)
self.pt_edit(text, content_type) self.pt_edit(text, content_type)
RESPONSE.setStatus(204) RESPONSE.setStatus(204)
return RESPONSE return RESPONSE
...@@ -368,7 +367,7 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable, ...@@ -368,7 +367,7 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable,
security.declareProtected(view_management_screens, 'html') security.declareProtected(view_management_screens, 'html')
def html(self): def html(self):
return self.content_type == 'text/html' return self.content_type == 'text/html'
security.declareProtected(view_management_screens, 'get_size') security.declareProtected(view_management_screens, 'get_size')
def get_size(self): def get_size(self):
return len(self.read()) return len(self.read())
...@@ -403,16 +402,16 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable, ...@@ -403,16 +402,16 @@ class ZopePageTemplate(Script, PageTemplate, Historical, Cacheable,
def __setstate__(self, state): def __setstate__(self, state):
# Perform on-the-fly migration to unicode. # Perform on-the-fly migration to unicode.
# Perhaps it might be better to work with the 'generation' module # Perhaps it might be better to work with the 'generation' module
# here? # here?
_text = state.get('_text') _text = state.get('_text')
if _text is not None and not isinstance(state['_text'], unicode): if _text is not None and not isinstance(state['_text'], unicode):
text, encoding = convertToUnicode(state['_text'], text, encoding = convertToUnicode(state['_text'],
state.get('content_type', 'text/html'), state.get('content_type', 'text/html'),
preferred_encodings) preferred_encodings)
state['_text'] = text state['_text'] = text
state['output_encoding'] = encoding state['output_encoding'] = encoding
self.__dict__.update(state) self.__dict__.update(state)
def pt_render(self, source=False, extra_context={}): def pt_render(self, source=False, extra_context={}):
...@@ -449,7 +448,7 @@ def manage_addPageTemplate(self, id, title='', text='', encoding='utf-8', ...@@ -449,7 +448,7 @@ def manage_addPageTemplate(self, id, title='', text='', encoding='utf-8',
if headers and headers.has_key('content_type'): if headers and headers.has_key('content_type'):
content_type = headers['content_type'] content_type = headers['content_type']
else: else:
content_type = guess_type(filename, text) content_type = guess_type(filename, text)
else: else:
...@@ -460,7 +459,7 @@ def manage_addPageTemplate(self, id, title='', text='', encoding='utf-8', ...@@ -460,7 +459,7 @@ def manage_addPageTemplate(self, id, title='', text='', encoding='utf-8',
if headers and headers.has_key('content_type'): if headers and headers.has_key('content_type'):
content_type = headers['content_type'] content_type = headers['content_type']
else: else:
content_type = guess_type(filename, text) content_type = guess_type(filename, text)
# ensure that we pass unicode to the constructor to # ensure that we pass unicode to the constructor to
# avoid further hassles with pt_edit() # avoid further hassles with pt_edit()
...@@ -473,12 +472,12 @@ def manage_addPageTemplate(self, id, title='', text='', encoding='utf-8', ...@@ -473,12 +472,12 @@ def manage_addPageTemplate(self, id, title='', text='', encoding='utf-8',
self._setObject(id, zpt) self._setObject(id, zpt)
zpt = getattr(self, id) zpt = getattr(self, id)
if RESPONSE: if RESPONSE:
if submit == " Add and Edit ": if submit == " Add and Edit ":
RESPONSE.redirect(zpt.absolute_url() + '/pt_editForm') RESPONSE.redirect(zpt.absolute_url() + '/pt_editForm')
else: else:
RESPONSE.redirect(self.absolute_url() + '/manage_main') RESPONSE.redirect(self.absolute_url() + '/manage_main')
else: else:
return zpt return zpt
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment