[Zope-Checkins] CVS: Zope/lib/python/webdav - Collection.py:1.22.2.1 EtagSupport.py:1.4.2.1 LockItem.py:1.4.2.1 NullResource.py:1.34.2.2 Resource.py:1.49.2.1 client.py:1.17.74.1 common.py:1.12.2.1 davcmds.py:1.15.2.1 xmltools.py:1.11.2.1

Andreas Jung andreas@zope.com
Wed, 2 Jan 2002 11:00:54 -0500


Update of /cvs-repository/Zope/lib/python/webdav
In directory cvs.zope.org:/tmp/cvs-serv20444

Modified Files:
      Tag: Zope-2_5-branch
	Collection.py EtagSupport.py LockItem.py NullResource.py 
	Resource.py client.py common.py davcmds.py xmltools.py 
Log Message:
merge from trunk


=== Zope/lib/python/webdav/Collection.py 1.22 => 1.22.2.1 ===
 __version__='$Revision$'[11:-2]
 
-import sys, os, string, Globals, davcmds, Lockable,re
+import sys, os,  Globals, davcmds, Lockable,re
 from common import urlfix, rfc1123_date
 from Resource import Resource
 from AccessControl import getSecurityManager
@@ -77,7 +77,7 @@
         self.dav__init(REQUEST, RESPONSE)
         ifhdr = REQUEST.get_header('If', '')
         url = urlfix(REQUEST['URL'], 'DELETE')
-        name = unquote(filter(None, string.split(url, '/'))[-1])
+        name = unquote(filter(None, url.split( '/'))[-1])
         parent = self.aq_parent
         user = getSecurityManager().getUser()
         token = None
@@ -106,7 +106,7 @@
             for tok in tokens:
                 # We already know that the simple if handler succeeded,
                 # we just want to get the right token out of the header now
-                if string.find(ifhdr, tok) > -1:
+                if ifhdr.find(tok) > -1:
                     token = tok
         cmd = davcmds.DeleteCollection()
         result = cmd.apply(self, token, user, REQUEST['URL'])


=== Zope/lib/python/webdav/EtagSupport.py 1.4 => 1.4.2.1 ===
 __version__ = "$Revision$"[11:-2]
 
-from string import capitalize, split, join, strip
+
 import time, Interface, re
 
 class EtagBaseInterface(Interface.Base):
@@ -85,12 +85,12 @@
         matchlist = REQUEST.get_header(header)
         if matchlist is None:
             # capitalize the words of the header, splitting on '-'
-            tmp = map(capitalize, split(header, '-'))
-            tmp = join(tmp,'-')
+            tmp = [x.capitalize() for x in  header.split('-')]
+            tmp = '-'.join(tmp)
             matchlist = REQUEST.get_header(tmp)
             if matchlist is None:
                 return None
-        matchlist = map(strip, split(matchlist, ','))
+        matchlist = [ x.strip() for x in matchlist.split(',')]
 
         r = []
         for match in matchlist:


=== Zope/lib/python/webdav/LockItem.py 1.4 => 1.4.2.1 ===
 __version__ = "$Revision$"[11:-2]
 
-from string import lower, split, join
+
 from Globals import Persistent
 from WriteLockInterface import LockItemInterface
 from AccessControl import ClassSecurityInfo
@@ -28,8 +28,8 @@
     # Timeout *should* be in the form "Seconds-XXX" or "Infinite"
     errors = []
     try:
-        t = split(str(timeout), '-')[-1]
-        if lower(t) == 'infinite':
+        t =str(timeout).split('-')[-1]
+        if t.lower() == 'infinite':
             timeout = DEFAULTTIMEOUT # Default to 1800 secods for infinite
         else:                       # requests
             timeout = long(t)
@@ -60,11 +60,11 @@
         # First check the values and raise value errors if outside of contract
         if not getattr(creator, 'getUserName', None):
             errors.append("Creator not a user object")
-        if lower(str(depth)) not in ('0', 'infinity'):
+        if str(depth).lower() not in ('0', 'infinity'):
             errors.append("Depth must be 0 or infinity")
-        if lower(locktype) != 'write':
+        if locktype.lower() != 'write':
             errors.append("Lock type '%s' not supported" % locktype)
-        if lower(lockscope) != 'exclusive':
+        if lockscope.lower() != 'exclusive':
             errors.append("Lock scope '%s' not supported" % lockscope)
 
         timeout, e = validateTimeout(timeout)
@@ -95,7 +95,7 @@
 
     def getCreatorPath(self):
         db, name = self._creator
-        path = join(db,'/')
+        path = '/'.join(db)
         return "/%s/%s" % (path, name)
 
     def getOwner(self):


=== Zope/lib/python/webdav/NullResource.py 1.34.2.1 => 1.34.2.2 ===
 __version__='$Revision$'[11:-2]
 
-import sys, os, string, mimetypes, Globals, davcmds
+import sys, os,  mimetypes, Globals, davcmds
 import Acquisition, OFS.content_types
 from common import absattr, aq_base, urlfix, tokenFinder, IfParser
 from AccessControl.Permission import Permission


=== Zope/lib/python/webdav/Resource.py 1.49 => 1.49.2.1 ===
 __version__='$Revision$'[11:-2]
 
-import sys, os, string, mimetypes, davcmds, ExtensionClass, Lockable
+import sys, os,  mimetypes, davcmds, ExtensionClass, Lockable
 from common import absattr, aq_base, urlfix, rfc1123_date, tokenFinder, urlbase
 from common import IfParser
 from urllib import quote, unquote
@@ -104,7 +104,7 @@
         # if 'col' is passed in, an operation is happening on a submember
         # of a collection, while the Lock may be on the parent.  Lob off
         # the final part of the URL  (ie '/a/b/foo.html' becomes '/a/b/')
-        if col: url = url[:string.rfind(url, '/')+1]
+        if col: url = url[:url.rfind('/')+1]
 
         havetag = lambda x, self=self: self.wl_hasLock(x)
         found = 0; resourcetagged = 0
@@ -151,14 +151,14 @@
             content_type=absattr(self.content_type)
         if content_type is None:
             url=urlfix(REQUEST['URL'], 'HEAD')
-            name=unquote(filter(None, string.split(url, '/'))[-1])
+            name=unquote(filter(None, url.split( '/')[-1]))
             content_type, encoding=mimetypes.guess_type(name)
         if content_type is None:
             if hasattr(self, 'default_content_type'):
                 content_type=absattr(self.default_content_type)
         if content_type is None:
             content_type = 'application/octet-stream'
-        RESPONSE.setHeader('Content-Type', string.lower(content_type))
+        RESPONSE.setHeader('Content-Type', content_type.lower())
 
         if hasattr(aq_base(self), 'get_size'):
             RESPONSE.setHeader('Content-Length', absattr(self.get_size))
@@ -183,7 +183,7 @@
     def OPTIONS(self, REQUEST, RESPONSE):
         """Retrieve communication options."""
         self.dav__init(REQUEST, RESPONSE)
-        RESPONSE.setHeader('Allow', string.join(self.__http_methods__,', '))
+        RESPONSE.setHeader('Allow', ', '.join(self.__http_methods__))
         RESPONSE.setHeader('Content-Length', 0)
         RESPONSE.setHeader('DAV', '1,2', 1)
         RESPONSE.setStatus(200)
@@ -206,7 +206,7 @@
         self.dav__init(REQUEST, RESPONSE)
         ifhdr = REQUEST.get_header('If', '')
         url = urlfix(REQUEST['URL'], 'DELETE')
-        name = unquote(filter(None, string.split(url, '/'))[-1])
+        name = unquote(filter(None, url.split( '/')[-1]))
         parent = self.aq_parent
         # Lock checking
         if Lockable.wl_isLocked(self):
@@ -301,9 +301,9 @@
             raise 'Bad Request', 'Invalid Destination header'
 
         name = path.pop()
-        parent_path = string.join(path, '/')
+        parent_path = '/'.join(path)
 
-        oflag=string.upper(REQUEST.get_header('Overwrite', 'F'))
+        oflag=REQUEST.get_header('Overwrite', 'F').upper()
         if not oflag in ('T', 'F'):
             raise 'Bad Request', 'Invalid Overwrite header.'
 
@@ -390,10 +390,10 @@
             raise 'Bad Request', 'No destination given'
 
         flag=REQUEST.get_header('Overwrite', 'F')
-        flag=string.upper(flag)
+        flag=flag.upper()
 
         name = path.pop()
-        parent_path = string.join(path, '/')
+        parent_path = '/'.join(path)
 
         try: parent = self.restrictedTraverse(path)
         except ValueError:


=== Zope/lib/python/webdav/client.py 1.17 => 1.17.74.1 ===
 __version__='$Revision$'[11:-2]
 
-import sys, os, string,  time, types,re
+import sys, os,  time, types,re
 import socket, httplib, mimetools
 from types import FileType
 from mimetypes import guess_type
@@ -30,22 +30,22 @@
 
     def getreply(self):
         file=self.sock.makefile('rb')
-        data=string.join(file.readlines(), '')
+        data=''.join(file.readlines())
         file.close()
         self.file=StringIO(data)
         line = self.file.readline()
         try:
-            [ver, code, msg] = string.split(line, None, 2)
+            [ver, code, msg] = line.split( None, 2)
         except ValueError:
           try:
-              [ver, code] = string.split(line, None, 1)
+              [ver, code] = line.split( None, 1)
               msg = ""
           except ValueError:
               return -1, line, None
         if ver[:5] != 'HTTP/':
             return -1, line, None
-        code=string.atoi(code)
-        msg =string.strip(msg)
+        code=int(code)
+        msg =msg.strip()
         headers =mimetools.Message(self.file, 0)
         return ver, code, msg, headers
 
@@ -62,7 +62,7 @@
         if mo: 
             host,port,uri=mo.group(1,2,3)
             self.host=host
-            self.port=port and string.atoi(port[1:]) or 80
+            self.port=port and int(port[1:]) or 80
             self.uri=uri or '/'
         else: raise ValueError, url
 
@@ -91,7 +91,7 @@
             return headers
         if atype=='Basic':
             headers['Authorization']=(
-                "Basic %s" % string.replace(encodestring('%s:%s' % (self.username,self.password)),
+                "Basic %s" % (encodestring('%s:%s' % (self.username,self.password))).replace(
 					    '\012',''))
             return headers
         raise ValueError, 'Unknown authentication scheme: %s' % atype
@@ -99,14 +99,14 @@
     def __enc_formdata(self, args={}):
         formdata=[]
         for key, val in args.items():
-            n=string.rfind(key, '__')
+            n=key.rfind( '__')
             if n > 0:
                 tag=key[n+2:]
                 key=key[:n]
             else: tag='string'
             func=varfuncs.get(tag, marshal_string)
             formdata.append(func(key, val))
-        return string.join(formdata, '&')
+        return '&'.join(formdata)
 
     def __enc_multipart(self, args={}):
         return MultiPart(args).render()
@@ -280,7 +280,7 @@
 
     def getprops(self, *names):
         if not names: return self.propfind()
-        tags=string.join(names, '/>\n  <')
+        tags='/>\n  <'.join(names )
         body='<?xml version="1.0" encoding="utf-8"?>\n' \
               '<d:propfind xmlns:d="DAV:">\n' \
               '  <d:prop>\n' \
@@ -295,7 +295,7 @@
         tags=[]
         for key, val in props.items():
             tags.append('  <%s>%s</%s>' % (key, val, key))
-        tags=string.join(tags, '\n')
+        tags='\n'.join(tags )
         body='<?xml version="1.0" encoding="utf-8"?>\n' \
               '<d:propertyupdate xmlns:d="DAV:">\n' \
               '<d:set>\n' \
@@ -309,7 +309,7 @@
     def delprops(self, *names):
         if not names:
             raise ValueError, 'No property names specified.'
-        tags=string.join(names, '/>\n  <')
+        tags='/>\n  <'.join(names)
         body='<?xml version="1.0" encoding="utf-8"?>\n' \
               '<d:propertyupdate xmlns:d="DAV:">\n' \
               '<d:remove>\n' \
@@ -344,7 +344,7 @@
         return '%s %s' % (self.code, self.msg)
 
     def get_header(self, name, val=None):
-        return self.headers.dict.get(string.lower(name), val)
+        return self.headers.dict.get(name.lower(), val)
 
     def get_headers(self):
         return self.headers.dict
@@ -358,7 +358,7 @@
         map(data.append, self.headers.headers)
         data.append('\r\n')
         data.append(self.body)
-        return string.join(data, '')
+        return ''.join(data)
 
 
 set_xml="""<?xml version="1.0" encoding="utf-8"?>
@@ -450,7 +450,7 @@
         if tp in (lt, tt):
             raise TypeError, 'Invalid recursion in data to be marshaled.'
         result.append(marshal_var("%s:%s" % (name, tname), v))    
-    return string.join(result, '&')
+    return '&'.join(result)
 
 def marshal_tuple(name, seq):
     return marshal_list(name, seq, 'tuple')
@@ -502,8 +502,8 @@
             if hasattr(val,'name'):
                 ct, enc=guess_type(val.name)
                 if not ct: ct='application/octet-stream'
-                fn=string.replace(val.name,'\\','/')
-                fn=fn[(string.rfind(fn,'/')+1):]
+                fn=val.name.replace('\\','/')
+                fn=fn[(fn.rfind('/')+1):]
             else:
                 ct='application/octet-stream'
                 enc=''
@@ -522,7 +522,7 @@
                 d.append(l)
                 l=val.read(8192)
         else:
-            n=string.rfind(name, '__')
+            n=name.rfind( '__')
             if n > 0: name='%s:%s' % (name[:n], name[n+2:])
             h['Content-Disposition']['_v']='form-data'
             h['Content-Disposition']['name']='"%s"' % name
@@ -538,7 +538,7 @@
         return '%s_%s_%s' % (int(time.time()), os.getpid(), random())
 
     def render(self):
-        join=string.join
+        
         h=self._headers
         s=[]
 
@@ -555,12 +555,12 @@
             for d in self._data:
                 p.append(d.render())
             t.append('--%s\n' % b)
-            t.append(join(p,'\n--%s\n' % b))
+            t.append(('\n--%s\n' % b).join(p))
             t.append('\n--%s--\n' % b)
-            t=join(t,'')
+            t=''.join(t)
             s.append('Content-Length: %s\n\n' % len(t))
             s.append(t)
-            return join(s,'')
+            return ''.join(s)
 
         else:
             for n,v in h.items():
@@ -577,11 +577,11 @@
                 for d in self._data:
                     p.append(d.render())
                 s.append('--%s\n' % b)
-                s.append(join(p,'\n--%s\n' % b))
+                s.append(('\n--%s\n' % b).join(p))
                 s.append('\n--%s--\n' % b)
-                return join(s,'')
+                return ''.join(s)
             else:
-                return join(s+self._data,'')
+                return ''.join(s+self._data)
 
 
     _extmap={'':     'text/plain',


=== Zope/lib/python/webdav/common.py 1.12 => 1.12.2.1 ===
 __version__='$Revision$'[11:-2]
 
-import string, time, urllib, re
+import  time, urllib, re
 from App.Common import iso8601_date, rfc850_date, rfc1123_date
 from App.Common import aq_base
 
@@ -64,7 +64,7 @@
     if not token: return None           # An empty string was passed in
     if token[0] == '[': return None     # An Etag was passed in
     if token[0] == '<': token = token[1:-1]
-    return token[string.find(token,':')+1:]
+    return token[token.find(':')+1:]
 
 
 ### If: header handling support.  IfParser returns a sequence of


=== Zope/lib/python/webdav/davcmds.py 1.15 => 1.15.2.1 ===
 __version__='$Revision$'[11:-2]
 
-import sys, os, string
+import sys, os
 from common import absattr, aq_base, urlfix, urlbase
 from OFS.PropertySheets import DAVProperties
 from LockItem import LockItem
@@ -26,8 +26,8 @@
 from urllib import quote
 from AccessControl import getSecurityManager
 
-def safe_quote(url, mark=r'%', find=string.find):
-    if find(url, mark) > -1:
+def safe_quote(url, mark=r'%'):
+    if url.find(mark) > -1:
         return url
     return quote(url)
 
@@ -105,14 +105,14 @@
             for ps in propsets:
                 if hasattr(aq_base(ps), 'dav__allprop'):
                     stats.append(ps.dav__allprop())
-            stats=string.join(stats, '') or '<d:status>200 OK</d:status>\n'
+            stats=''.join(stats) or '<d:status>200 OK</d:status>\n'
             result.write(stats)            
         elif self.propname:
             stats=[]
             for ps in propsets:
                 if hasattr(aq_base(ps), 'dav__propnames'):
                     stats.append(ps.dav__propnames())
-            stats=string.join(stats, '') or '<d:status>200 OK</d:status>\n'
+            stats=''.join(stats) or '<d:status>200 OK</d:status>\n'
             result.write(stats)
         elif self.propnames:
             rdict={}
@@ -255,7 +255,7 @@
                          '  </d:prop>\n' \
                          '  <d:status>HTTP/1.1 %s</d:status>\n' \
                          '</d:propstat>\n' % (ns, name, status))
-        errmsg=string.join(errors, '\n') or 'The operation succeded.'
+        errmsg='\n'.join(errors) or 'The operation succeded.'
         result.write('<d:responsedescription>\n' \
                      '%s\n' \
                      '</d:responsedescription>\n' \
@@ -266,7 +266,7 @@
         # This is lame, but I cant find a way to keep ZPublisher
         # from sticking a traceback into my xml response :(
         get_transaction().abort()
-        result=string.replace(result, '200 OK', '424 Failed Dependency')
+        result=result.replace( '200 OK', '424 Failed Dependency')
         return result
 
 
@@ -282,7 +282,7 @@
         self.type = 'write'
         self.owner = ''
         timeout = request.get_header('Timeout', 'infinite')
-        self.timeout = string.strip(string.split(timeout,',')[-1])
+        self.timeout = timeout.split(',')[-1].strip()
         self.parse(data)
 
     def parse(self, data, dav='DAV:'):


=== Zope/lib/python/webdav/xmltools.py 1.11 => 1.11.2.1 ===
 __version__='$Revision$'[11:-2]
 
-import sys, os, string
+import sys, os
 import Shared.DC.xml.xmllib
 from Acquisition import Implicit
 
@@ -63,12 +63,12 @@
                 return ''
             self=self.aq_parent
 
-    def elements(self, name=None, ns=None, lower=string.lower):
+    def elements(self, name=None, ns=None ):
         nodes=[]
-        name=name and lower(name)
+        name=name and name.lower()
         for node in self.__nodes__:
             if node.__type__==type_element and \
-               ((name is None) or (lower(node.__name__)==name)) and \
+               ((name is None) or ((node.__name__.lower())==name)) and \
                ((ns is None) or (node.namespace()==ns)):
                 nodes.append(node)
         return nodes
@@ -100,7 +100,7 @@
         result=['<?xml version="1.0" encoding="%s"?>' % self.encoding]
         for node in self.__nodes__:
             result.append(node.toxml())
-        return string.join(result, '')
+        return ''.join(result)
 
     #def __del__(self):
     #    self.document=None
@@ -119,16 +119,16 @@
             attr=Attribute(name, val)
             self.__attrs__.append(attr)
         self.ns_parse()
-        parts=string.split(self.__name__, ':')
+        parts=self.__name__.split(':')
         if len(parts) > 1:
             self.__nskey__=parts[0]
-            self.__name__=string.join(parts[1:], ':')
+            self.__name__=':'.join(parts[1:])
             
     def ns_parse(self):
         nsdef=self.__nsdef__={}
         for attr in self.attrs():
             name, val=attr.name(), attr.value()
-            key=string.lower(name)
+            key=name.lower()
             if key[:6]=='xmlns:':
                 nsdef[name[6:]]=val
             elif key=='xmlns':
@@ -198,13 +198,13 @@
             for node in self.__nodes__:
                 result.append(node.toxml())
             result.append('</%s>' % qname)
-        return string.join(result, '')
+        return ''.join(result)
 
     def strval(self, top=1):
         if not self.__value__ and not self.__nodes__:
             return ''
         result=map(lambda n: n.toxml(), self.__nodes__)
-        return string.join(result, '')
+        return ''.join(result)
 
 class Attribute(Node):
     __type__=type_attribute
@@ -212,12 +212,12 @@
         self.__name__=name
         self.__value__=val
         self.__nskey__=''
-        parts=string.split(name, ':')
+        parts=name.split(':')
         if len(parts) > 1:
-            pre=string.lower(parts[0])
+            pre=parts[0].lower()
             if not (pre in ('xml', 'xmlns')):
                 self.__nskey__=parts[0]
-                self.__name__=string.join(parts[1:], ':')
+                self.__name__=':'.join(parts[1:])
 
     def remap(self, dict, n=0, top=1):
         nsval=self.namespace()
@@ -344,12 +344,12 @@
 
 
 
-def escape(data, rmap={}, replace=string.replace):
-    data=replace(data, "&", "&amp;")
-    data=replace(data, "<", "&lt;")
-    data=replace(data, ">", "&gt;")
+def escape(data, rmap={}):
+    data=data.replace( "&", "&amp;")
+    data=data.replace( "<", "&lt;")
+    data=data.replace( ">", "&gt;")
     for key, val in rmap.items():
-        data=replace(data, key, val)
+        data=data.replace( key, val)
     return data
 
 def remap(data, dict={'DAV:': 'd'}):