[Zope-Checkins] SVN: Zope/branches/2.9/doc/CHANGES.txt Hmm, this never made it in. No matter, just set the SVN record straigt for future releases

2007-03-27 Thread Martijn Pieters
Log message for revision 73720:
  Hmm, this never made it in. No matter, just set the SVN record straigt for 
future releases

Changed:
  U   Zope/branches/2.9/doc/CHANGES.txt

-=-
Modified: Zope/branches/2.9/doc/CHANGES.txt
===
--- Zope/branches/2.9/doc/CHANGES.txt   2007-03-27 12:32:02 UTC (rev 73719)
+++ Zope/branches/2.9/doc/CHANGES.txt   2007-03-27 12:38:13 UTC (rev 73720)
@@ -8,6 +8,10 @@
 
Bugs fixed
 
+  - Protected various security mutators with a new postonly decorator.
+The decorator limits method publishing to POST requests only, and
+is a backport from Zope 2.11's requestmethod decorator factory.
+
   - Collector #2298: webdav.Resource.COPY and webdav.Resource.MOVE did
 not send the expected copy/move events.
 

___
Zope-Checkins maillist  -  Zope-Checkins@zope.org
http://mail.zope.org/mailman/listinfo/zope-checkins


[Zope-Checkins] SVN: Zope/branches/2.9/ Collector #2300: delimit *all* headers with CRLF; accumulated_headers and appendHeader use \n for delimeters and never get corrected on output

2007-03-27 Thread Martijn Pieters
Log message for revision 73721:
  Collector #2300: delimit *all* headers with CRLF; accumulated_headers and 
appendHeader use \n for delimeters and never get corrected on output

Changed:
  U   Zope/branches/2.9/doc/CHANGES.txt
  U   Zope/branches/2.9/lib/python/ZServer/HTTPResponse.py
  U   Zope/branches/2.9/lib/python/ZServer/tests/test_responses.py

-=-
Modified: Zope/branches/2.9/doc/CHANGES.txt
===
--- Zope/branches/2.9/doc/CHANGES.txt   2007-03-27 12:38:13 UTC (rev 73720)
+++ Zope/branches/2.9/doc/CHANGES.txt   2007-03-27 12:43:31 UTC (rev 73721)
@@ -4,6 +4,12 @@
   Change information for previous versions of Zope can be found in the
   file HISTORY.txt.
 
+  Zope 2.9.8 (unreleased)
+
+   Bugs fixed
+  
+  - Collector #2300: delimit *all* HTTP Response headers with CRLF.
+
   Zope 2.9.7 (2007/03/25)
 
Bugs fixed

Modified: Zope/branches/2.9/lib/python/ZServer/HTTPResponse.py
===
--- Zope/branches/2.9/lib/python/ZServer/HTTPResponse.py2007-03-27 
12:38:13 UTC (rev 73720)
+++ Zope/branches/2.9/lib/python/ZServer/HTTPResponse.py2007-03-27 
12:43:31 UTC (rev 73721)
@@ -114,8 +114,15 @@
 self._chunking=1
 else:
 self.setHeader('Connection','close')
+
+headers = headers.items()
+for line in self.accumulated_headers.splitlines():
+if line[0] == '\t':
+headers[-1][1] += '\n' + line
+continue
+headers.append(line.split(': ', 1))
 
-for key, val in headers.items():
+for key, val in headers:
 if key.lower()==key:
 # only change non-literal header names
 key=%s%s % (key[:1].upper(), key[1:])
@@ -125,10 +132,13 @@
 key=%s-%s%s % (key[:l],key[l+1:l+2].upper(),key[l+2:])
 start=l+1
 l=key.find('-',start)
+val = val.replace('\n\t', '\r\n\t')
 append(%s: %s % (key, val))
 if self.cookies:
-headersl=headersl+self._cookie_list()
-headersl[len(headersl):]=[self.accumulated_headers, body]
+headersl.extend(self._cookie_list())
+
+append('')
+append(body)
 return \r\n.join(headersl)
 
 _tempfile=None
@@ -151,6 +161,7 @@
 
 
 
+
 if type(data) != type(''):
 raise TypeError('Value must be a string')
 

Modified: Zope/branches/2.9/lib/python/ZServer/tests/test_responses.py
===
--- Zope/branches/2.9/lib/python/ZServer/tests/test_responses.py
2007-03-27 12:38:13 UTC (rev 73720)
+++ Zope/branches/2.9/lib/python/ZServer/tests/test_responses.py
2007-03-27 12:43:31 UTC (rev 73721)
@@ -56,7 +56,7 @@
 one = ZServerHTTPResponse(stdout=DummyChannel())
 self.assertRaises(AssertionError,
   one.setBody, test_streamiterator())
-
+
 class DummyChannel:
 def __init__(self):
 self.out = StringIO()
@@ -92,8 +92,46 @@
 return self.data
 raise StopIteration
 
+class ZServerHTTPResponseTestCase(unittest.TestCase):
+Test ZServer HTTPResponse object
+
+def _makeOne(self):
+return ZServerHTTPResponse()
+
+def testToString(self):
+response = self._makeOne()
+response.headers = {
+'content-type': 'text/plain',
+'all-lower-case': 'foo',
+'Title-Cased': 'bar',
+'mixed-CasED': 'spam',
+'multilined': 'eggs\n\tham'}
+response.accumulated_headers = 'foo-bar: bar\n\tbaz\nFoo-bar: monty\n'
+response.cookies = dict(foo=dict(value='bar'))
+response.body = 'A body\nwith multiple lines\n'
+
+result = str(response)
+headers, body = result.rsplit('\r\n\r\n')
+
+self.assertEqual(body, response.body)
+
+self.assertTrue(headers.startswith('HTTP/1.0 200 OK\r\n'))
+
+# 15 header lines all delimited by \r\n
+self.assertEqual(
+['\n' in line for line in headers.split('\r\n')],
+15 * [False])
+
+self.assertTrue('Multilined: eggs\r\n\tham\r\n' in headers)
+self.assertTrue('Foo-Bar: bar\r\n\tbaz\r\n' in headers)
+
 def test_suite():
-return unittest.makeSuite(ZServerResponseTestCase)
+suite = unittest.TestSuite()
+suite.addTests((
+unittest.makeSuite(ZServerResponseTestCase),
+unittest.makeSuite(ZServerHTTPResponseTestCase)
+))
+return suite
 
 if __name__ == __main__:
 unittest.main(defaultTest=test_suite)

___
Zope-Checkins maillist  -  Zope-Checkins@zope.org
http://mail.zope.org/mailman/listinfo/zope-checkins


[Zope-Checkins] SVN: Zope/trunk/ Mark ZCatalog catalog brains with an interface

2007-03-27 Thread Martijn Pieters
Log message for revision 73762:
  Mark ZCatalog catalog brains with an interface

Changed:
  U   Zope/trunk/doc/CHANGES.txt
  U   Zope/trunk/lib/python/Products/ZCatalog/CatalogBrains.py
  U   Zope/trunk/lib/python/Products/ZCatalog/interfaces.py

-=-
Modified: Zope/trunk/doc/CHANGES.txt
===
--- Zope/trunk/doc/CHANGES.txt  2007-03-27 14:34:19 UTC (rev 73761)
+++ Zope/trunk/doc/CHANGES.txt  2007-03-27 14:36:38 UTC (rev 73762)
@@ -51,6 +51,9 @@
 
 Features added
 
+  - ZCatalog result objects (catalog brains) now have an interface,
+ZCatalog.interfaces.ICatalogBrain.
+
   - A new module, AccessControl.requestmethod, provides a decorator
 factory that limits decorated methods to one request method only.
 For example, marking a method with @requestmethod('POST') limits

Modified: Zope/trunk/lib/python/Products/ZCatalog/CatalogBrains.py
===
--- Zope/trunk/lib/python/Products/ZCatalog/CatalogBrains.py2007-03-27 
14:34:19 UTC (rev 73761)
+++ Zope/trunk/lib/python/Products/ZCatalog/CatalogBrains.py2007-03-27 
14:36:38 UTC (rev 73762)
@@ -13,9 +13,13 @@
 
 __version__ = $Revision$[11:-2]
 
+from zope.interface import implements
+
 import Acquisition, Record
 from ZODB.POSException import ConflictError
 
+from interfaces import ICatalogBrain
+
 # Switch for new behavior, raise exception instead of returning None.
 # Use 'catalog-getObject-raises off' in zope.conf to restore old behavior.
 GETOBJECT_RAISES = True
@@ -25,6 +29,8 @@
 required, and provides just enough smarts to let us get the URL, path,
 and cataloged object without having to ask the catalog directly.
 
+implements(ICatalogBrain)
+
 def has_key(self, key):
 return self.__record_schema__.has_key(key)
 

Modified: Zope/trunk/lib/python/Products/ZCatalog/interfaces.py
===
--- Zope/trunk/lib/python/Products/ZCatalog/interfaces.py   2007-03-27 
14:34:19 UTC (rev 73761)
+++ Zope/trunk/lib/python/Products/ZCatalog/interfaces.py   2007-03-27 
14:36:38 UTC (rev 73762)
@@ -246,3 +246,37 @@
 pghandler -- optional Progresshandler as defined in ProgressHandler.py
 (see also README.txt)
 
+
+# XXX This should inherit from an IRecord interface, if there ever is one.
+class ICatalogBrain(Interface):
+Catalog brain that handles looking up attributes as
+required, and provides just enough smarts to let us get the URL, path,
+and cataloged object without having to ask the catalog directly.
+
+def has_key(key):
+Record has this field
+
+def getPath():
+Get the physical path for this record
+
+def getURL(relative=0):
+Generate a URL for this record
+
+def _unrestrictedGetObject():
+Return the object for this record
+
+Same as getObject, but does not do security checks.
+
+
+def getObject():
+Return the object for this record
+
+Will return None if the object cannot be found via its cataloged path
+(i.e., it was deleted or moved without recataloging), or if the user is
+not authorized to access the object.
+
+
+
+def getRID():
+Return the record ID for this object.
+

___
Zope-Checkins maillist  -  Zope-Checkins@zope.org
http://mail.zope.org/mailman/listinfo/zope-checkins


[Zope-Checkins] SVN: Zope/trunk/lib/python/Products/Five/browser/ Fix Collector #2264: browser:view should set __name__

2007-03-27 Thread Martijn Pieters
Log message for revision 73766:
  Fix Collector #2264: browser:view should set __name__

Changed:
  U   Zope/trunk/lib/python/Products/Five/browser/metaconfigure.py
  U   Zope/trunk/lib/python/Products/Five/browser/tests/pages.txt
  U   Zope/trunk/lib/python/Products/Five/browser/tests/pages.zcml

-=-
Modified: Zope/trunk/lib/python/Products/Five/browser/metaconfigure.py
===
--- Zope/trunk/lib/python/Products/Five/browser/metaconfigure.py
2007-03-27 14:57:27 UTC (rev 73765)
+++ Zope/trunk/lib/python/Products/Five/browser/metaconfigure.py
2007-03-27 14:57:27 UTC (rev 73766)
@@ -251,6 +251,7 @@
 except:
 cname = GeneratedClass
 
+cdict['__name__'] = name
 newclass = makeClass(cname, bases, cdict)
 
 _handle_for(_context, for_)

Modified: Zope/trunk/lib/python/Products/Five/browser/tests/pages.txt
===
--- Zope/trunk/lib/python/Products/Five/browser/tests/pages.txt 2007-03-27 
14:57:27 UTC (rev 73765)
+++ Zope/trunk/lib/python/Products/Five/browser/tests/pages.txt 2007-03-27 
14:57:27 UTC (rev 73766)
@@ -85,8 +85,18 @@
 
self.folder.unrestrictedTraverse('testoid/@@new_style_class2')
   Products.Five.metaclass.NewStyleClass ...
+  
+Both browser:view and browser:page are ILocation providers, so make sure they
+have a __name__ attribute:
 
+   page = self.folder.unrestrictedTraverse('testoid/eagle.txt')
+   page.__name__
+  u'eagle.txt'
 
+   view = self.folder.unrestrictedTraverse('testoid/named_view')
+   view.__name__
+  u'named_view'
+
 ZPT-based browser pages
 ---
 

Modified: Zope/trunk/lib/python/Products/Five/browser/tests/pages.zcml
===
--- Zope/trunk/lib/python/Products/Five/browser/tests/pages.zcml
2007-03-27 14:57:27 UTC (rev 73765)
+++ Zope/trunk/lib/python/Products/Five/browser/tests/pages.zcml
2007-03-27 14:57:27 UTC (rev 73766)
@@ -218,6 +218,14 @@
   permission=zope2.Public
   /
 
+  !-- A named view --
+  browser:view
+  name=named_view
+  for=Products.Five.tests.testing.simplecontent.ISimpleContent
+  class=.pages.SimpleView
+  permission=zope2.Public
+  /
+  
   !-- XXX this should really be in Five.form.tests --
 
   !-- protected edit form for permission check --

___
Zope-Checkins maillist  -  Zope-Checkins@zope.org
http://mail.zope.org/mailman/listinfo/zope-checkins


[Zope-Checkins] SVN: Products.Five/branches/1.3/browser/ Merge Collector #2264 fix from Zope trunk: browser:view should set __name__

2007-03-27 Thread Martijn Pieters
Log message for revision 73768:
  Merge Collector #2264 fix from Zope trunk: browser:view should set __name__

Changed:
  U   Products.Five/branches/1.3/browser/metaconfigure.py
  U   Products.Five/branches/1.3/browser/tests/pages.txt
  U   Products.Five/branches/1.3/browser/tests/pages.zcml

-=-
Modified: Products.Five/branches/1.3/browser/metaconfigure.py
===
--- Products.Five/branches/1.3/browser/metaconfigure.py 2007-03-27 14:58:44 UTC 
(rev 73767)
+++ Products.Five/branches/1.3/browser/metaconfigure.py 2007-03-27 14:59:16 UTC 
(rev 73768)
@@ -247,6 +247,7 @@
 except:
 cname = GeneratedClass
 
+cdict['__name__'] = name
 newclass = makeClass(cname, bases, cdict)
 
 _handle_for(_context, for_)

Modified: Products.Five/branches/1.3/browser/tests/pages.txt
===
--- Products.Five/branches/1.3/browser/tests/pages.txt  2007-03-27 14:58:44 UTC 
(rev 73767)
+++ Products.Five/branches/1.3/browser/tests/pages.txt  2007-03-27 14:59:16 UTC 
(rev 73768)
@@ -85,8 +85,18 @@
 
self.folder.unrestrictedTraverse('testoid/@@new_style_class2')
   Products.Five.metaclass.NewStyleClass ...
+  
+Both browser:view and browser:page are ILocation providers, so make sure they
+have a __name__ attribute:
 
+   page = self.folder.unrestrictedTraverse('testoid/eagle.txt')
+   page.__name__
+  u'eagle.txt'
 
+   view = self.folder.unrestrictedTraverse('testoid/named_view')
+   view.__name__
+  u'named_view'
+
 ZPT-based browser pages
 ---
 

Modified: Products.Five/branches/1.3/browser/tests/pages.zcml
===
--- Products.Five/branches/1.3/browser/tests/pages.zcml 2007-03-27 14:58:44 UTC 
(rev 73767)
+++ Products.Five/branches/1.3/browser/tests/pages.zcml 2007-03-27 14:59:16 UTC 
(rev 73768)
@@ -218,6 +218,14 @@
   permission=zope2.Public
   /
 
+  !-- A named view --
+  browser:view
+  name=named_view
+  for=Products.Five.tests.testing.simplecontent.ISimpleContent
+  class=.pages.SimpleView
+  permission=zope2.Public
+  /
+  
   !-- XXX this should really be in Five.form.tests --
 
   !-- protected edit form for permission check --

___
Zope-Checkins maillist  -  Zope-Checkins@zope.org
http://mail.zope.org/mailman/listinfo/zope-checkins