Beispiel #1
0
 def test_clean_file_no_uploaded_file(self):
     workflow = Workflow.create_and_init()
     tab = workflow.tabs.first()
     wfm = tab.wf_modules.create(module_id_name='uploadfile', order=0)
     context = RenderContext(workflow.id, wfm.id, None, None, None)
     result = clean_value(ParamDType.File(), str(uuid.uuid4()), context)
     self.assertIsNone(result)
Beispiel #2
0
    def test_clean_file_happy_path(self):
        workflow = Workflow.create_and_init()
        tab = workflow.tabs.first()
        wfm = tab.wf_modules.create(module_id_name="uploadfile",
                                    order=0,
                                    slug="step-1")
        id = str(uuid.uuid4())
        key = f"wf-${workflow.id}/wfm-${wfm.id}/${id}"
        minio.put_bytes(minio.UserFilesBucket, key, b"1234")
        UploadedFile.objects.create(
            wf_module=wfm,
            name="x.csv.gz",
            size=4,
            uuid=id,
            bucket=minio.UserFilesBucket,
            key=key,
        )
        context = RenderContext(workflow.id, wfm.id, None, None, None)
        result = clean_value(ParamDType.File(), id, context)
        self.assertIsInstance(result, pathlib.Path)
        self.assertEqual(result.read_bytes(), b"1234")
        self.assertEqual(result.suffixes, [".csv", ".gz"])

        # Assert that once `path` goes out of scope, it's deleted
        str_path = str(result)  # get the filesystem path
        del result  # should finalize, deleting the file on the filesystem
        with self.assertRaises(FileNotFoundError):
            os.open(str_path, 0)
Beispiel #3
0
 def test_clean_file_wrong_wf_module(self):
     workflow = Workflow.create_and_init()
     tab = workflow.tabs.first()
     wfm = tab.wf_modules.create(module_id_name='uploadfile', order=0)
     wfm2 = tab.wf_modules.create(module_id_name='uploadfile', order=1)
     id = str(uuid.uuid4())
     key = f'wf-${workflow.id}/wfm-${wfm.id}/${id}'
     minio.put_bytes(minio.UserFilesBucket, key, b'1234')
     UploadedFile.objects.create(wf_module=wfm2, name='x.csv.gz', size=4,
                                 uuid=id, bucket=minio.UserFilesBucket,
                                 key=key)
     context = RenderContext(workflow.id, wfm.id, None, None, None)
     result = clean_value(ParamDType.File(), id, context)
     self.assertIsNone(result)
Beispiel #4
0
 def test_clean_file_no_minio_file(self):
     workflow = Workflow.create_and_init()
     tab = workflow.tabs.first()
     wfm = tab.wf_modules.create(module_id_name="uploadfile",
                                 order=0,
                                 slug="step-1")
     wfm2 = tab.wf_modules.create(module_id_name="uploadfile",
                                  order=1,
                                  slug="step-2")
     id = str(uuid.uuid4())
     key = f"wf-${workflow.id}/wfm-${wfm.id}/${id}"
     # Oops -- let's _not_ put the file!
     # minio.put_bytes(minio.UserFilesBucket, key, b'1234')
     UploadedFile.objects.create(
         wf_module=wfm2,
         name="x.csv.gz",
         size=4,
         uuid=id,
         bucket=minio.UserFilesBucket,
         key=key,
     )
     context = RenderContext(workflow.id, wfm.id, None, None, None)
     result = clean_value(ParamDType.File(), id, context)
     self.assertIsNone(result)
Beispiel #5
0
 def test_clean_file_none(self):
     result = clean_value(ParamDType.File(), None, None)
     self.assertEqual(result, None)
 def test_clean_file_error(self):
     with self.assertRaisesRegex(RuntimeError, "Unsupported: fetch file"):
         clean_value(ParamDType.File(), None, None)