Ejemplo n.º 1
0
def do_file_copy(credential_id, remote_host_id, datafile_map, base_dir=None):
    if base_dir is None:
        base_dir = ["mytardis-data"]
    elif isinstance(base_dir, basestring):
        base_dir = split_path(base_dir) + ["mytardis-data"]

    credential = Credential.objects.get(pk=credential_id)
    ssh = credential.get_client_for_host(RemoteHost.objects.get(pk=remote_host_id))
    sftp_client = ssh.open_sftp()

    def unique_base_path(base, increment=0):
        base_copy = list(base)
        try:
            if increment > 0:
                suffix = "_%i" % increment
            else:
                suffix = ""
            base_copy[-1] += suffix
            sftp_client.stat("/".join(base_copy))
            return unique_base_path(base, increment + 1)
        except IOError:
            return base_copy

    base_dir = unique_base_path(base_dir)

    make_dirs(sftp_client, base_dir)

    for (_path, datafile) in datafile_map:
        path = list(_path)
        if datafile.directory is not None:
            path += datafile.directory.split("/")
        path = base_dir + path
        path_str = "/".join(path + [datafile.filename])
        make_dirs(sftp_client, path)
        sftp_client.putfo(datafile.file_object, path_str, datafile.size)
Ejemplo n.º 2
0
 def get_leaf(self, path, update=False):
     path = path.strip('/')
     elems = collections.deque(split_path(path))
     leaf = self.children.get(elems.popleft())
     if leaf and update:
         leaf.update()
     while elems:
         leaf = leaf.children.get(elems.popleft())
         if leaf and update:
             leaf.update()
     return leaf
Ejemplo n.º 3
0
 def get_leaf(self, path, update=False):
     path = path.strip('/')
     elems = collections.deque(split_path(path))
     leaf = self.children.get(elems.popleft())
     if leaf and update:
         leaf.update()
     while elems:
         leaf = leaf.children.get(elems.popleft())
         if leaf and update:
             leaf.update()
     return leaf
Ejemplo n.º 4
0
def do_file_copy(credential_id, remote_host_id, datafile_map, base_dir=None):
    if base_dir is None:
        base_dir = ['mytardis-data']
    elif isinstance(base_dir, basestring):
        base_dir = split_path(base_dir) + ['mytardis-data']

    credential = Credential.objects.get(pk=credential_id)
    ssh = credential.get_client_for_host(
        RemoteHost.objects.get(pk=remote_host_id))
    sftp_client = ssh.open_sftp()

    def unique_base_path(base, increment=0):
        base_copy = list(base)
        try:
            if increment > 0:
                suffix = "_%i" % increment
            else:
                suffix = ""
            base_copy[-1] += suffix
            sftp_client.stat('/'.join(base_copy))
            return unique_base_path(base, increment + 1)
        except IOError:
            return base_copy

    base_dir = unique_base_path(base_dir)

    make_dirs(sftp_client, base_dir)

    for (_path, datafile) in datafile_map:
        path = list(_path)
        if datafile.directory is not None:
            path += datafile.directory.split('/')
        path = base_dir + path
        path_str = '/'.join(path + [datafile.filename])
        make_dirs(sftp_client, path)
        sftp_client.putfo(datafile.file_object, path_str, datafile.size)
Ejemplo n.º 5
0
 def add_path(self, path):
     path = path.strip('/')
     elems = split_path(path)
     return self.add_path_elems(elems)
Ejemplo n.º 6
0
 def add_path(self, path):
     path = path.strip('/')
     elems = split_path(path)
     return self.add_path_elems(elems)