예제 #1
0
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)))
예제 #2
0
    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)
예제 #3
0
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)))
예제 #4
0
    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")
예제 #5
0
    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")
예제 #6
0
    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")
예제 #7
0
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
예제 #8
0
    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")