def __init__(self, url, connection=None, validateResourceNames=True): """ Creates an instance for the given URL User must invoke validate() after construction to check the resource on the server. @param url: Unique resource location for this storer. @type url: C{string} @param connection: this optional parameter contains a Connection object for the host part of the given URL. Passing a connection saves memory by sharing this connection. (defaults to None) @type connection: L{webdav.Connection} @raise WebdavError: If validation of resource name path parts fails. """ assert connection == None or isinstance(connection, Connection) parts = urlsplit(url, allow_fragments=False) self.path = parts[2] self.validateResourceNames = validateResourceNames # validate URL path for part in self.path.split('/'): if part != '' and not "ino:" in part: # explicitly allowing this character sequence as a part of a path (Tamino 4.4) if self.validateResourceNames: try: validateResourceName(part) except WrongNameError: raise WebdavError("Found invalid resource name part.") self.name = part # was: filter(lambda part: part and validateResourceName(part), self.path.split('/')) # but filter is deprecated self.defaultNamespace = None # default XML name space of properties if connection: self.connection = connection else: conn = parts[1].split(":") if len(conn) == 1: self.connection = Connection( conn[0], protocol=parts[0]) # host and protocol else: self.connection = Connection( conn[0], int(conn[1]), protocol=parts[0]) # host and port and protocol self.versionHandler = VersionHandler(self.connection, self.path)
def deleteResource(self, name, lockToken=None): """ Delete a collection which is contained within this collection @param name: leaf name of a contained collection resource @param lockToken: None or token returned by last lock operation @type lockToken: L{LockToken} """ assert isinstance(name, types.StringType) or isinstance(name, types.UnicodeType) assert lockToken == None or isinstance(lockToken, LockToken), \ "Invalid lockToken argument %s" % type(lockToken) header = {} if lockToken: header = lockToken.toHeader() if self.validateResourceNames: validateResourceName(name) response = self.connection.delete(self.path + name, header) if response.status == Constants.CODE_MULTISTATUS and response.msr.errorCount > 0: raise WebdavError("Request failed: %s" % response.msr.reason, response.msr.code)
def addCollection(self, name, lockToken=None): """ Make a new WebDAV collection resource within this collection. @param name: of the new collection @param lockToken: None or token returned by last lock operation @type lockToken: L{LockToken} """ assert isinstance(name, types.StringType) or isinstance(name, types.UnicodeType) assert lockToken == None or isinstance(lockToken, LockToken), \ "Invalid lockToken argument %s" % type(lockToken) header = {} if lockToken: header = lockToken.toHeader() if self.validateResourceNames: validateResourceName(name) if name[-1] != '/': # Collection URL must end with slash name += '/' self.connection.mkcol(self.path + name, header) return CollectionStorer(self.url + name, self.connection, self.validateResourceNames)
def addResource(self, name, content=None, properties=None, lockToken=None): """ Create a new empty WebDAV resource contained in this collection with the given properties. @param name: leaf name of the new resource @param content: None or initial binary content of resource @param properties: name/value-map containing properties @param lockToken: None or token returned by last lock operation @type lockToken: L{LockToken} """ assert isinstance(name, types.StringType) or isinstance(name, types.UnicodeType) assert lockToken == None or isinstance(lockToken, LockToken), \ "Invalid lockToken argument %s" % type(lockToken) if self.validateResourceNames: validateResourceName(name) # check for invalid characters resource_ = ResourceStorer(self.url + name, self.connection, self.validateResourceNames) resource_.uploadContent(content, lockToken) if properties: resource_.writeProperties(properties, lockToken) return resource_