def dirlist(self, path, flags=0, timeout=0, callback=None): """List entries of a directory. :param path: path to the directory to list :type path: string :param flags: An `ORed` combination of :mod:`XRootD.client.flags.DirListFlags` where the default is `DirListFlags.NONE` :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and :mod:`XRootD.client.responses.DirectoryList` object .. warning:: Currently, passing `DirListFlags.STAT` with an asynchronous call to :mod:`XRootD.client.FileSystem.dirlist()` does not work, due to an xrootd client limitation. So you'll get ``None`` instead of the ``StatInfo`` instance. See `the GitHub issue <https://github.com/xrootd/xrootd/issues/2>`_ for more details. """ if callback: callback = CallbackWrapper(callback, DirectoryList) return XRootDStatus( self.__fs.dirlist(path, flags, timeout, callback)) status, response = self.__fs.dirlist(path, flags, timeout) if response: response = DirectoryList(response) return XRootDStatus(status), response
def sync(self, timeout=0, callback=None): """Commit all pending disk writes. :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and None """ if callback: callback = CallbackWrapper(callback, None) return XRootDStatus(self.__file.sync(timeout, callback)) status, response = self.__file.sync(timeout) return XRootDStatus(status), None
def ping(self, timeout=0, callback=None): """Check if the server is alive. :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and None """ if callback: callback = CallbackWrapper(callback, None) return XRootDStatus(self.__fs.ping(timeout, callback)) status, response = self.__fs.ping(timeout) return XRootDStatus(status), None
def visa(self, timeout=0, callback=None): """Get access token to a file. :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and a string """ if callback: callback = CallbackWrapper(callback, None) return XRootDStatus(self.__file.visa(timeout, callback)) status, response = self.__file.visa(timeout) return XRootDStatus(status), response
def list_xattr(self, timeout=0, callback=None): """List all extended file attributes. :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and :mod:`list of touples (string, string, XRootD.client.responses.XRootDStatus)` object """ if callback: callback = CallbackWrapper(callback, list) return XRootDStatus(self.__file.list_xattr(timeout, callback)) status, response = self.__file.list_xattr(timeout) return XRootDStatus(status), response
def protocol(self, timeout=0, callback=None): """Obtain server protocol information. :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and :mod:`XRootD.client.responses.ProtocolInfo` object """ if callback: callback = CallbackWrapper(callback, ProtocolInfo) return XRootDStatus(self.__fs.protocol(timeout, callback)) status, response = self.__fs.protocol(timeout) if response: response = ProtocolInfo(response) return XRootDStatus(status), response
def rmdir(self, path, timeout=0, callback=None): """Remove a directory. :param path: path to the directory to remove :type path: string :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and None """ if callback: callback = CallbackWrapper(callback, None) return XRootDStatus(self.__fs.rmdir(path, timeout, callback)) status, response = self.__fs.rmdir(path, timeout) return XRootDStatus(status), None
def del_xattr(self, attrs, timeout=0, callback=None): """Delete extended file attributes. :param attrs: list of extended attribute names to be deleted :type attrs: list of strings :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and :mod:`list of touples (string, XRootD.client.responses.XRootDStatus)` object """ if callback: callback = CallbackWrapper(callback, list) return XRootDStatus(self.__file.del_xattr(attrs, timeout, callback)) status, response = self.__file.del_xattr(attrs, timeout) return XRootDStatus(status), response
def set_xattr(self, attrs, timeout=0, callback=None): """Set extended file attributes. :param attrs: extended attributes to be set on the file :type attrs: list of tuples of name/value pairs :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and :mod:`list of touples (string, XRootD.client.responses.XRootDStatus)` object """ if callback: callback = CallbackWrapper(callback, list) return XRootDStatus(self.__file.set_xattr(attrs, timeout, callback)) status, response = self.__file.set_xattr(attrs, timeout) return XRootDStatus(status), response
def sendinfo(self, info, timeout=0, callback=None): """Send info to the server (up to 1024 characters). :param info: the info string to be sent :type info: string :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and None """ if callback: callback = CallbackWrapper(callback, None) return XRootDStatus(self.__fs.sendinfo(info, timeout, callback)) status, response = self.__fs.sendinfo(info, timeout) return XRootDStatus(status), response
def truncate(self, size, timeout=0, callback=None): """Truncate the file to a particular size. :param size: desired size of the file :type size: integer :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and None """ if callback: callback = CallbackWrapper(callback, None) return XRootDStatus(self.__file.truncate(size, timeout, callback)) status, response = self.__file.truncate(size, timeout) return XRootDStatus(status), None
def fcntl(self, arg, timeout=0, callback=None): """Perform a custom operation on an open file. :param arg: argument :type arg: string :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and a string """ if callback: callback = CallbackWrapper(callback, None) return XRootDStatus(self.__file.fcntl(arg, timeout, callback)) status, response = self.__file.fcntl(arg, timeout) return XRootDStatus(status), response
def statvfs(self, path, timeout=0, callback=None): """Obtain status information for a Virtual File System. :param path: path to the file/directory to stat :type path: string :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and :mod:`XRootD.client.responses.StatInfoVFS` object """ if callback: callback = CallbackWrapper(callback, StatInfoVFS) return XRootDStatus(self.__fs.statvfs(path, timeout, callback)) status, response = self.__fs.statvfs(path, timeout) if response: response = StatInfoVFS(response) return XRootDStatus(status), response
def stat(self, force=False, timeout=0, callback=None): """Obtain status information for this file. :param force: do not use the cached information, force re-stating :type force: boolean :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and :mod:`XRootD.client.responses.StatInfo` object """ if callback: callback = CallbackWrapper(callback, StatInfo) return XRootDStatus(self.__file.stat(force, timeout, callback)) status, response = self.__file.stat(force, timeout) if response: response = StatInfo(response) return XRootDStatus(status), response
def chmod(self, path, mode, timeout=0, callback=None): """Change access mode on a directory or a file. :param path: path to the file/directory to change access mode :type path: string :param mode: An `OR`ed` combination of :mod:`XRootD.client.flags.AccessMode` :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and None """ if callback: callback = CallbackWrapper(callback, None) return XRootDStatus(self.__fs.chmod(path, mode, timeout, callback)) status, response = self.__fs.chmod(path, mode, timeout) return XRootDStatus(status), None
def mv(self, source, dest, timeout=0, callback=None): """Move a directory or a file. :param source: the file or directory to be moved :type source: string :param dest: the new name :type dest: string :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and None """ if callback: callback = CallbackWrapper(callback, None) return XRootDStatus(self.__fs.mv(source, dest, timeout, callback)) status, response = self.__fs.mv(source, dest, timeout) return XRootDStatus(status), None
def truncate(self, path, size, timeout=0, callback=None): """Truncate a file. :param path: path to the file to be truncated :type path: string :param size: file size :type size: integer :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and None """ if callback: callback = CallbackWrapper(callback, None) return XRootDStatus(self.__fs.truncate(path, size, timeout, callback)) status, response = self.__fs.truncate(path, size, timeout) return XRootDStatus(status), None
def deeplocate(self, path, flags, timeout=0, callback=None): """Locate a file, recursively locate all disk servers. :param path: path to the file to be located :type path: string :param flags: An `ORed` combination of :mod:`XRootD.client.flags.OpenFlags` :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and :mod:`XRootD.client.responses.LocationInfo` object """ if callback: callback = CallbackWrapper(callback, LocationInfo) return XRootDStatus(self.__fs.deeplocate(path, flags, timeout, callback)) status, response = self.__fs.deeplocate(path, flags, timeout) if response: response = LocationInfo(response) return XRootDStatus(status), response
def read(self, offset=0, size=0, timeout=0, callback=None): """Read a data chunk from a given offset. :param offset: offset from the beginning of the file :type offset: integer :param size: number of bytes to be read :type size: integer :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and the data that was read """ if callback: callback = CallbackWrapper(callback, None) return XRootDStatus(self.__file.read(offset, size, timeout, callback)) status, response = self.__file.read(offset, size, timeout) return XRootDStatus(status), response
def write(self, buffer, offset=0, size=0, timeout=0, callback=None): """Write a data chunk at a given offset. :param buffer: data to be written :param offset: offset from the beginning of the file :type offset: integer :param size: number of bytes to be written :type size: integer :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and None """ if callback: callback = CallbackWrapper(callback, None) return XRootDStatus(self.__file.write(buffer, offset, size, timeout, callback)) status, response = self.__file.write(buffer, offset, size, timeout) return XRootDStatus(status), None
def prepare(self, files, flags, priority=0, timeout=0, callback=None): """Prepare one or more files for access. :param files: list of files to be prepared :type files: list :param flags: An `ORed` combination of :mod:`XRootD.client.flags.PrepareFlags` :param priority: priority of the request 0 (lowest) - 3 (highest) :type priority: integer :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and None """ if callback: callback = CallbackWrapper(callback, None) return XRootDStatus( self.__fs.prepare(files, flags, priority, timeout, callback)) status, response = self.__fs.prepare(files, flags, priority, timeout) return XRootDStatus(status), response
def open(self, url, flags=0, mode=0, timeout=0, callback=None): """Open the file pointed to by the given URL. :param url: url of the file to be opened :type url: string :param flags: An `ORed` combination of :mod:`XRootD.client.flags.OpenFlags` where the default is `OpenFlags.NONE` :param mode: access mode for new files, an `ORed` combination of :mod:`XRootD.client.flags.AccessMode` where the default is `AccessMode.NONE` :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and None """ if callback: callback = CallbackWrapper(callback, None) return XRootDStatus(self.__file.open(url, flags, mode, timeout, callback)) status, response = self.__file.open(url, flags, mode, timeout) return XRootDStatus(status), None
def vector_read(self, chunks, timeout=0, callback=None): """Read scattered data chunks in one operation. :param chunks: list of the chunks to be read. The default maximum chunk size is 2097136 bytes and the default maximum number of chunks per request is 1024. The server may be queried using :func:`XRootD.client.FileSystem.query` for the actual settings. :type chunks: list of 2-tuples of the form (offset, size) :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and :mod:`XRootD.client.responses.VectorReadInfo` object """ if callback: callback = CallbackWrapper(callback, VectorReadInfo) return XRootDStatus(self.__file.vector_read(chunks, timeout, callback)) status, response = self.__file.vector_read(chunks, timeout) if response: response = VectorReadInfo(response) return XRootDStatus(status), response
def query(self, querycode, arg, timeout=0, callback=None): """Obtain server information. :param querycode: the query code as specified in :mod:`XRootD.client.flags.QueryCode` :param arg: query argument :type arg: string :returns: the query response or None if there was an error :rtype: string .. note:: For more information about XRootD query codes and arguments, see `the relevant section in the protocol reference <http://xrootd.slac.stanford.edu/doc/prod/XRdv299.htm#_Toc337053385>`_. """ if callback: callback = CallbackWrapper(callback, None) return XRootDStatus(self.__fs.query(querycode, arg, timeout, callback)) status, response = self.__fs.query(querycode, arg, timeout) return XRootDStatus(status), response
def mkdir(self, path, flags=0, mode=0, timeout=0, callback=None): """Create a directory. :param path: path to the directory to create :type path: string :param flags: An `ORed` combination of :mod:`XRootD.client.flags.MkDirFlags` where the default is `MkDirFlags.NONE` :param mode: the initial file access mode, an `ORed` combination of :mod:`XRootD.client.flags.AccessMode` where the default is `rwxr-x---` :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and None """ if mode == 0: mode = AccessMode.UR | AccessMode.UW | AccessMode.UX | \ AccessMode.GR | AccessMode.GX if callback: callback = CallbackWrapper(callback, None) return XRootDStatus(self.__fs.mkdir(path, flags, mode, timeout, callback)) status, response = self.__fs.mkdir(path, flags, mode, timeout) return XRootDStatus(status), None
def close(self, timeout=0, callback=None): """Close the file. :returns: tuple containing :mod:`XRootD.client.responses.XRootDStatus` object and None As of Python 2.5, you can avoid having to call this method explicitly if you use the :keyword:`with` statement. For example, the following code will automatically close *f* when the :keyword:`with` block is exited:: from __future__ import with_statement # This isn't required in Python 2.6 with client.File() as f: f.open("root://someserver//somefile") for line in f: print line, """ if callback: callback = CallbackWrapper(callback, None) return XRootDStatus(self.__file.close(timeout, callback)) status, response = self.__file.close(timeout) return XRootDStatus(status), None