Exemple #1
0
    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)
Exemple #2
0
 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)        
Exemple #3
0
    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)
Exemple #4
0
    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)
Exemple #5
0
 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) 
Exemple #6
0
    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)
Exemple #7
0
 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_
Exemple #8
0
    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_