def data_paste(request, uid): """Used to paste objects in results and data clipboards as a Data object.""" project = Project.objects.filter(uid=uid).first() owner = request.user board = request.GET.get("board") clipboard = request.session.get(settings.CLIPBOARD_NAME, {}) data_clipboard = clipboard.get(board, []) for datauid in data_clipboard: if board == const.COPIED_DATA: obj = Data.objects.filter(uid=datauid).first() dtype = obj.type else: obj = Job.objects.filter(uid=datauid).first() dtype = "DATA" if obj: auth.create_data(project=project, path=obj.get_data_dir(), user=owner, name=obj.name, type=dtype, text=obj.text) clipboard[board] = [] request.session.update({settings.CLIPBOARD_NAME: clipboard}) return redirect(reverse("data_list", kwargs=dict(uid=project.uid)))
def handle(self, *args, **options): # Collect the parameters. pid = options['pid'] did = options['did'] path = options['path'] update_toc = options["update"] text = options['text'] name = options['name'] type = options['type'] data = Data.objects.get_all(uid=did).first() # Work with existing data. if data: if update_toc: data.make_toc() print(f"*** Data id : {did} table of contents updated.") return project = Project.objects.filter(uid=pid).first() # Project must exist. if not project: logger.error(f"Project uid={pid} not found!") return # Slightly different course of action on file and directories. isfile = os.path.isfile(path) isdir = os.path.isdir(path) # The data field is empty. if not (isfile or isdir): logger.error(f"Path is not a file nor a directory: {path}") return # Generate alternate names based on input directory type. print(f"*** Project: {project.name} ({project.uid})") if isdir: print(f"*** Linking directory: {path}") altname = os.path.split(path)[0].split(os.sep)[-1] else: print(f"*** Linking file: {path}") altname = os.path.split(path)[-1] # Select the name. name = name or altname print(f"*** Creating data: {name}") # Create the data. auth.create_data(project=project, path=path, type=type, name=name, text=text)
def file_paste(request, uid): project = Project.objects.filter(uid=uid).first() clipboard = request.session.get(settings.CLIPBOARD_NAME, {}) file_clipboard = clipboard.get(const.COPIED_FILES, []) for single_file in file_clipboard: if os.path.exists(single_file): auth.create_data(project=project, path=single_file, user=request.user) clipboard[const.COPIED_FILES] = [] request.session.update({settings.CLIPBOARD_NAME: clipboard}) return redirect(reverse("data_list", kwargs=dict(uid=project.uid)))
def setUp(self): logger.setLevel(logging.WARNING) self.username = f"tested{get_uuid(10)}" self.owner = models.User.objects.create(username=self.username, is_staff=True, email="*****@*****.**") self.owner.set_password("tested") self.owner.save() self.project = auth.create_project(user=self.owner, name="Test project", privacy=models.Project.PUBLIC, uid="tested") data = auth.create_data(project=self.project, path=__file__) analysis = auth.create_analysis(project=self.project, json_text='', template="# Add code here.") self.job = auth.create_job(analysis=analysis) self.proj_params = dict(uid=self.project.uid) self.analysis_params = dict(uid=analysis.uid) self.recipes_id_param = dict(id=analysis.id) self.data_params = dict(uid=data.uid) self.job_params = dict(uid=self.job.uid) self.data_file_params = dict(uid=data.uid, path="foo.txt") self.job_file_params = dict(uid=self.job.uid, path="foo.txt")
def test_add_data(self): "Test adding data directory to a project using management commands " data_directory = auth.join(__file__, "..", "data") data = auth.create_data(project=self.project, path=data_directory) self.assertTrue(os.path.exists(data.get_data_dir()), "Directory not being linked")
def setUp(self): logger.setLevel(logging.WARNING) # Set up generic owner self.owner = models.User.objects.create_user(username=f"tested{get_uuid(10)}", email="*****@*****.**") self.owner.set_password("tested") self.project = auth.create_project(user=self.owner, name="tested", text="Text", summary="summary", uid="tested") self.project.save() # Set up generic data for editing self.data = auth.create_data(project=self.project, path=__file__, name="tested")
def create_data(root_dir, data_list): """Create data from data list, paths are relative to root """ for data in data_list: pid = data.get("project_uid", None) # Get data path relative to root_dir path = data.get("value", "") project = Project.objects.get_all(uid=pid).first() dtype = data.get("type") text = data.get("help") name = data.get("name") path = path if path.startswith("/") else os.path.join(root_dir, path) print(f"*** Creating data in project={pid}, path={path}") # Create the data. auth.create_data(project=project, path=path, type=dtype, name=name, text=text) return
def test_dynamic_field(self): "Test data generator" from biostar.recipes import const data = auth.create_data(self.project, path=__file__) display_type = const.DROPDOWN json_data = dict(display=display_type, value=data.name, source= 'PROJECT') field = factory.dynamic_field(json_data, project=self.project) if not field: self.assertFalse(f"field generator for display={display_type} failed")