[Zope] Re: WebDAV turds...

Chris Withers chris at simplistix.co.uk
Mon Aug 9 16:42:14 EDT 2004


BTW, this pain and suffering is now gone in CVS and SVN, and so you 
won't need to do this anymore in Zope 2.8 or 2.7.3 :-)

Chris

Chris Withers wrote:

> Vahur Rebas wrote:
> 
>>
>> I'm now bugging you again.
> 
> 
> Dump the following in a file called __init__.py in a folder called 
> WebDAVPatch in your Products directory:
> 
> # Disable MS-Author-via = DAV by monkey patch
> 
> from ZPublisher.HTTPRangeSupport import HTTPRangeInterface
> from webdav.Resource import Resource, rfc1123_date
> 
> def dav__init(self, request, response):
>         # Init expected HTTP 1.1 / WebDAV headers which are not
>         # currently set by the base response object automagically.
>         #
>         # Note we set an borg-specific header for ie5 :( Also, we
>         # sniff for a ZServer response object, because we don't
>         # want to write duplicate headers (since ZS writes Date
>         # and Connection itself).
>         if not hasattr(response, '_server_version'):
>             response.setHeader('Connection', 'close')
>             response.setHeader('Date', rfc1123_date(), 1)
>         # response.setHeader('MS-Author-Via', 'DAV')
> 
>         # HTTP Range support
>         if HTTPRangeInterface.isImplementedBy(self):
>             response.setHeader('Accept-Ranges', 'bytes')
>         else:
>             response.setHeader('Accept-Ranges', 'none')
> 
> Resource.dav__init = dav__init
> 
> def OPTIONS(self, REQUEST, RESPONSE):
>         """Retrieve communication options."""
>         self.dav__init(REQUEST, RESPONSE)
>         RESPONSE.setHeader('Allow', ', '.join(self.__http_methods__))
>         RESPONSE.setHeader('Content-Length', 0)
>         # RESPONSE.setHeader('DAV', '1,2', 1)
> 
>         RESPONSE.setStatus(200)
>         return RESPONSE
> 
> Resource.OPTIONS = OPTIONS
> 
> from webdav.Collection import Collection, rfc1123_date
> 
> def dav__init(self, request, response):
>         # We are allowed to accept a url w/o a trailing slash
>         # for a collection, but are supposed to provide a
>         # hint to the client that it should be using one.
>         # [WebDAV, 5.2]
>         pathinfo=request.get('PATH_INFO','')
>         if pathinfo and pathinfo[-1] != '/':
>             location='%s/' % request['URL1']
>             response.setHeader('Content-Location', location)
>         response.setHeader('Connection', 'close', 1)
>         response.setHeader('Date', rfc1123_date(), 1)
>         # response.setHeader('MS-Author-Via', 'DAV')
> 
> Collection.dav__init = dav__init
> 
> As a note to anyone reading, this crap will be GOING AWAY on both the 
> 2.7 branch and the HEAD this Friday unless someone can give me some 
> compelling reason for it not to ;-)
> 
> http://zope.org/Collectors/Zope/1441
> 
> cheers,
> 
> Chris
> 

-- 
Simplistix - Content Management, Zope & Python Consulting
            - http://www.simplistix.co.uk


More information about the Zope mailing list