def set_uri(name, writecap, readcap=None, metadata=None, overwrite=True):
    """I add a child (by writecap+readcap) at the specific name. I return
        a Deferred that fires when the operation finishes. If overwrite= is
        True, I will replace any existing child of the same name, otherwise
        an existing child will cause me to return ExistingChildError. The
        child name must be a unicode string.

        The child caps could be for a file, or for a directory. If you have
        both the writecap and readcap, you should provide both arguments.
        If you have only one cap and don't know whether it is read-only,
        provide it as the writecap argument and leave the readcap as None.
        If you have only one cap that is known to be read-only, provide it
        as the readcap argument and leave the writecap as None.
        The filecaps are typically obtained from an IFilesystemNode with
        get_uri() and get_readonly_uri().

        If metadata= is provided, I will use it as the metadata for the named
        edge. This will replace any existing metadata. If metadata= is left
        as the default value of None, I will set ['mtime'] to the current
        time, and I will set ['ctime'] to the current time if there was not
        already a child by this name present. This roughly matches the
        ctime/mtime semantics of traditional filesystems.  See the
        "About the metadata" section of webapi.txt for futher information.

        If this directory node is read-only, the Deferred will errback with a
        NotWriteableError."""
