예제 #1
0
    def copy(self, source, destination):
        # Prepare the source path for XRootD
        if not self._parse_url(source):
            source = abspath(source)
        else:
            domain, dirname, filename = self._parse_url(source)
            source = f"{domain}/{dirname}/{filename}"

        # Prepare the destination path for XRootD
        assert os.path.basename(source) == os.path.basename(destination)
        if self._parse_url(destination):
            domain, dirname, filename = self._parse_url(destination)
            destination = f"{domain}/{dirname}/{filename}"
            self.makedirs(domain, dirname)
        else:
            destination = abspath(destination)
            if not os.path.isdir(os.path.dirname(destination)):
                os.makedirs(os.path.dirname(destination))

        # Perform the copy operation
        process = client.CopyProcess()
        process.add_job(source, destination, force=True)
        process.prepare()
        status, returns = process.run()
        if not status.ok or not returns[0]["status"].ok:
            raise XRootDFileException(
                "Error copying from " + source + " to " + destination,
                repr(status),
                repr(returns),
            )
예제 #2
0
 def mtime(self):
     if self.exists():
         return self._xrd.file_last_modified(self.remote_file())
     else:
         raise XRootDFileException(
             "The file does not seem to exist remotely: %s" % self.remote_file()
         )
예제 #3
0
 def remove(self, url):
     domain, dirname, filename = self._parse_url(url)
     filename = join(dirname, filename)
     status, _ = self.get_client(domain).rm(filename)
     if not status.ok:
         raise XRootDFileException(
             'Failed to remove file '+filename+' from remote '+domain+'\n'+repr(status))
예제 #4
0
 def makedirs(self, domain, dirname):
     print("Making directories", domain, dirname)
     assert dirname.endswith("/")
     status, _ = self.get_client(domain).mkdir(dirname, MkDirFlags.MAKEPATH)
     if not status.ok:
         raise XRootDFileException("Failed to create directory " + dirname,
                                   repr(status))
예제 #5
0
 def list_directory(self, domain, dirname):
     status, dirlist = self.get_client(domain).dirlist(dirname, DirListFlags.STAT)
     if not status.ok:
         raise XRootDFileException(
             'Error listing directory '+dirname+' on domain '+domain+
             '\n'+repr(status)+'\n'+repr(dirlist)
         )
     return dirlist.dirlist
예제 #6
0
 def exists(self, url):
     domain, dirname, filename = self._parse_url(url)
     status, dirlist = self.get_client(domain).dirlist(dirname)
     if not status.ok:
         if status.errno == 3011:
             return False
         else:
             raise XRootDFileException(
                 'Error listing directory '+dirname+' on domain '+domain+
                 '\n'+repr(status)+'\n'+repr(dirlist))
     return filename in [f.name for f in dirlist.dirlist]
예제 #7
0
    def exists(self, url):

        domain, dirname, filename = self._parse_url(url)

        status, statInfo = self.get_client(domain).stat(os.path.join(dirname, filename))

        if not status.ok:
            if status.errno == 3011:
                return False
            raise XRootDFileException(
                "Error stating URL "
                + os.path.join(dirname, filename)
                + " on domain "
                + domain
                + "\n"
                + repr(status)
                + "\n"
                + repr(statInfo)
            )

        return True