Example #1
0
    def setUp(self):
        self.updown_auth_manager = JWTUpDownAuthManager("secret",
                                                        timedelta(seconds=1))

        self.storage_dir = temp_folder()
        self.service = FileUploadDownloadService(self.updown_auth_manager, self.storage_dir)
        self.disk_path = os.path.join(self.storage_dir, "dir", "other")
        self.relative_file_path = "dir/other/thefile.txt"
        self.absolute_file_path = os.path.join(self.disk_path, "thefile.txt")
        mkdir(self.disk_path)
        self.content = "the content"
Example #2
0
class FileUploadDownloadServiceTest(unittest.TestCase):
    def setUp(self):
        self.updown_auth_manager = JWTUpDownAuthManager(
            "secret", timedelta(seconds=1))

        self.storage_dir = temp_folder()
        self.service = FileUploadDownloadService(self.updown_auth_manager,
                                                 self.storage_dir)
        self.disk_path = os.path.join(self.storage_dir, "dir", "other")
        self.relative_file_path = "dir/other/thefile.txt"
        self.absolute_file_path = os.path.join(self.disk_path, "thefile.txt")
        mkdir(self.disk_path)
        self.content = "the content"

    def test_file_download(self):
        save(os.path.join(self.disk_path, "thefile.txt"), self.content)
        token = self.updown_auth_manager.get_token_for(self.relative_file_path,
                                                       "pepe",
                                                       len(self.content))
        path_to_file = self.service.get_file_path(self.relative_file_path,
                                                  token)

        self.assertEquals(path_to_file, self.absolute_file_path)

        readed_content = load(self.absolute_file_path)
        self.assertEquals(readed_content, self.content)

        # Expire token
        sleep(2)
        self.assertRaises(NotFoundException, self.service.get_file_path,
                          self.relative_file_path, token)

    def test_file_upload(self):
        token = self.updown_auth_manager.get_token_for(self.relative_file_path,
                                                       "pepe",
                                                       len(self.content))

        file_saver = MockFileSaver("thefile.txt", self.content)
        self.assertFalse(os.path.exists(self.absolute_file_path))
        self.service.put_file(file_saver, self.absolute_file_path, token,
                              len(self.content))

        self.assertTrue(os.path.exists(self.absolute_file_path))

        # Raises if wrong size
        self.assertRaises(RequestErrorException, self.service.put_file,
                          file_saver, self.absolute_file_path, token,
                          len(self.content) + 1)
    def attach_to(self, app):

        storage_path = app.file_manager.paths.store
        service = FileUploadDownloadService(app.updown_auth_manager,
                                            storage_path)

        @app.route(self.route + '/<filepath:path>', method=["GET"])
        def get(filepath):
            token = request.query.get("signature", None)
            file_path = service.get_file_path(filepath, token)
            # https://github.com/kennethreitz/requests/issues/1586
            mimetype = "x-gzip" if filepath.endswith(".tgz") else "auto"
            return static_file(os.path.basename(file_path),
                               root=os.path.dirname(file_path),
                               mimetype=mimetype)

        @app.route(self.route + '/<filepath:path>', method=["PUT"])
        def put(filepath):
            token = request.query.get("signature", None)
            file_saver = ConanFileUpload(request.body,
                                         None,
                                         filename=os.path.basename(filepath),
                                         headers=request.headers)
            abs_path = os.path.abspath(
                os.path.join(storage_path, os.path.normpath(filepath)))
            # Body is a stringIO (generator)
            service.put_file(file_saver, abs_path, token,
                             request.content_length)
            return
Example #4
0
class FileUploadDownloadServiceTest(unittest.TestCase):
    def setUp(self):
        self.updown_auth_manager = JWTUpDownAuthManager("secret", timedelta(seconds=1))

        self.storage_dir = temp_folder()
        self.service = FileUploadDownloadService(self.updown_auth_manager, self.storage_dir)
        self.disk_path = os.path.join(self.storage_dir, "dir", "other")
        self.relative_file_path = "dir/other/thefile.txt"
        self.absolute_file_path = os.path.join(self.disk_path, "thefile.txt")
        mkdir(self.disk_path)
        self.content = "the content"

    def test_file_download(self):
        save(os.path.join(self.disk_path, "thefile.txt"), self.content)
        token = self.updown_auth_manager.get_token_for(self.relative_file_path, "pepe", len(self.content))
        path_to_file = self.service.get_file_path(self.relative_file_path, token)

        self.assertEquals(path_to_file, self.absolute_file_path)

        readed_content = load(self.absolute_file_path)
        self.assertEquals(readed_content, self.content)

        # Expire token
        sleep(2)
        self.assertRaises(NotFoundException, self.service.get_file_path, self.relative_file_path, token)

    def test_file_upload(self):
        token = self.updown_auth_manager.get_token_for(self.relative_file_path, "pepe", len(self.content))

        file_saver = MockFileSaver("thefile.txt", self.content)
        self.assertFalse(os.path.exists(self.absolute_file_path))
        self.service.put_file(file_saver, self.absolute_file_path, token, len(self.content))

        self.assertTrue(os.path.exists(self.absolute_file_path))

        # Raises if wrong size
        self.assertRaises(
            RequestErrorException,
            self.service.put_file,
            file_saver,
            self.absolute_file_path,
            token,
            len(self.content) + 1,
        )
Example #5
0
    def setUp(self):
        self.updown_auth_manager = JWTUpDownAuthManager("secret", timedelta(seconds=1))

        self.storage_dir = temp_folder()
        self.service = FileUploadDownloadService(self.updown_auth_manager, self.storage_dir)
        self.disk_path = os.path.join(self.storage_dir, "dir", "other")
        self.relative_file_path = "dir/other/thefile.txt"
        self.absolute_file_path = os.path.join(self.disk_path, "thefile.txt")
        mkdir(self.disk_path)
        self.content = "the content"