def sftp_access(request): """ Show dynamically generated instructions on how to connect to SFTP :param request: HttpRequest :return: HttpResponse """ object_type = request.GET.get('object_type') object_id = request.GET.get('object_id') sftp_start_dir = '' if object_type and object_id: ct = ContentType.objects.get_by_natural_key( 'tardis_portal', object_type) item = ct.model_class().objects.get(id=object_id) if object_type == 'experiment': exps = [item] dataset = None datafile = None else: if object_type == 'dataset': dataset = item datafile = None elif object_type == 'datafile': datafile = item dataset = datafile.dataset exps = dataset.experiments.all() allowed_exps = [] for exp in exps: if has_experiment_download_access(request, exp.id): allowed_exps.append(exp) if len(allowed_exps) > 0: exp = allowed_exps[0] path_parts = ['/home', request.user.username, 'experiments', dirname_with_id(exp.title, exp.id)] if dataset is not None: path_parts.append( dirname_with_id(dataset.description, dataset.id)) if datafile is not None: path_parts.append(datafile.directory) sftp_start_dir = path.join(*path_parts) if request.user.userprofile.isDjangoAccount: sftp_username = request.user.username else: login_attr = getattr(settings, 'SFTP_USERNAME_ATTRIBUTE', 'email') sftp_username = getattr(request.user, login_attr) c = { 'sftp_host': request.get_host().split(':')[0], 'sftp_port': getattr(settings, 'SFTP_PORT', 2200), 'sftp_username': sftp_username, 'sftp_start_dir': sftp_start_dir, 'site_name': getattr(settings, 'SITE_TITLE', 'MyTardis'), } c['sftp_url'] = 'sftp://{}@{}:{}{}'.format( c['sftp_username'], c['sftp_host'], c['sftp_port'], c['sftp_start_dir']) return render(request, template_name='tardis_portal/sftp.html', context=c)
def sftp_access(request): """ Show dynamically generated instructions on how to connect to SFTP :param request: HttpRequest :return: HttpResponse """ object_type = request.GET.get('object_type') object_id = request.GET.get('object_id') sftp_start_dir = '' if object_type and object_id: ct = ContentType.objects.get_by_natural_key('tardis_portal', object_type) item = ct.model_class().objects.get(id=object_id) if object_type == 'experiment': exps = [item] dataset = None datafile = None else: if object_type == 'dataset': dataset = item datafile = None elif object_type == 'datafile': datafile = item dataset = datafile.dataset exps = dataset.experiments.all() allowed_exps = [] for exp in exps: if has_experiment_download_access(request, exp.id): allowed_exps.append(exp) if len(allowed_exps) > 0: exp = allowed_exps[0] path_parts = [ '/home', request.user.username, 'experiments', dirname_with_id(exp.title, exp.id) ] if dataset is not None: path_parts.append( dirname_with_id(dataset.description, dataset.id)) if datafile is not None: path_parts.append(datafile.directory) sftp_start_dir = path.join(*path_parts) if request.user.userprofile.isDjangoAccount: sftp_username = request.user.username else: login_attr = getattr(settings, 'SFTP_USERNAME_ATTRIBUTE', 'email') sftp_username = getattr(request.user, login_attr) c = { 'sftp_host': request.get_host().split(':')[0], 'sftp_port': getattr(settings, 'SFTP_PORT', 2200), 'sftp_username': sftp_username, 'sftp_start_dir': sftp_start_dir, 'site_name': getattr(settings, 'SITE_TITLE', 'MyTardis'), } c['sftp_url'] = 'sftp://{}@{}:{}{}'.format(c['sftp_username'], c['sftp_host'], c['sftp_port'], c['sftp_start_dir']) return render(request, template_name='tardis_portal/sftp.html', context=c)
def update_experiments(self): exps = [(dirname_with_id(exp.title, exp.id), exp) for exp in self.host_obj.experiments] self.clear_children() for exp_name, exp in exps: child = self.children[exp_name] child.name = exp_name child.obj = exp child.update = child.update_datasets
def update_datasets(self): all_files_name = '00_all_files' datasets = [(dirname_with_id(ds.description, ds.id), ds) for ds in self.obj.datasets.all()] self.clear_children() for ds_name, ds in datasets: if ds_name == all_files_name: ds_name = '%s_dataset' % all_files_name child = self.children[ds_name] child.name = ds_name child.obj = ds child.update = child.update_dataset_files child = self.children[all_files_name] child.name = all_files_name child.obj = self.obj child.update = child.update_all_files