def test_coloring_underline(self) -> None: file = FileStatus( "test.txt", 1024, FileStatusType.FILE, int(time.mktime(time.strptime("2018-01-01 03:00:00", "%Y-%m-%d %H:%M:%S"))), Action.READ, ) folder = FileStatus( "tmp", 0, FileStatusType.DIRECTORY, int(time.mktime(time.strptime("2018-01-01 03:00:00", "%Y-%m-%d %H:%M:%S"))), Action.WRITE, ) painter = BSDPainter("exfxcxdxbxegedabagacad", underline=True) assert painter.paint(file.name, file.type) == click.style( "test.txt", underline=True ) assert painter.paint(folder.name, folder.type) == click.style( "tmp", fg="blue", underline=True ) painter = BSDPainter("Eafxcxdxbxegedabagacad", underline=True) assert painter.paint(file.name, file.type) == click.style( "test.txt", underline=True ) assert painter.paint(folder.name, folder.type) == click.style( "tmp", fg="blue", bg="black", bold=True, underline=True )
def test_coloring_underline(self) -> None: file = FileStatus( "test.txt", 1024, FileStatusType.FILE, int(time.mktime(time.strptime("2018-01-01 03:00:00", "%Y-%m-%d %H:%M:%S"))), Action.READ, ) folder = FileStatus( "tmp", 0, FileStatusType.DIRECTORY, int(time.mktime(time.strptime("2018-01-01 03:00:00", "%Y-%m-%d %H:%M:%S"))), Action.WRITE, ) painter = GnuPainter("di=32;41:fi=0;44:no=0;46", underline=True) assert painter.paint(file.name, file.type) == "\x1b[0;44m\x1b[4mtest.txt\x1b[0m" assert painter.paint(folder.name, folder.type) == "\x1b[32;41m\x1b[4mtmp\x1b[0m" painter = GnuPainter("di=32;41:no=0;46", underline=True) assert painter.paint(file.name, file.type) == "\x1b[0;46m\x1b[4mtest.txt\x1b[0m" assert painter.paint(folder.name, folder.type) == "\x1b[32;41m\x1b[4mtmp\x1b[0m" painter = GnuPainter("no=0;46", underline=True) assert painter.paint(file.name, file.type) == "\x1b[0;46m\x1b[4mtest.txt\x1b[0m" assert painter.paint(folder.name, folder.type) == "\x1b[01;34m\x1b[4mtmp\x1b[0m" painter = GnuPainter("*.text=0;46", underline=True) assert painter.paint(file.name, file.type) == "\x1b[4mtest.txt\x1b[0m" assert painter.paint(folder.name, folder.type) == "\x1b[01;34m\x1b[4mtmp\x1b[0m" painter = GnuPainter("*.txt=0;46", underline=True) assert painter.paint(file.name, file.type) == "\x1b[0;46m\x1b[4mtest.txt\x1b[0m" assert painter.paint(folder.name, folder.type) == "\x1b[01;34m\x1b[4mtmp\x1b[0m"
async def test_storage_ls_legacy(aiohttp_server: _TestServerFactory, make_client: _MakeClient) -> None: JSON = { "FileStatuses": { "FileStatus": [ { "path": "foo", "length": 1024, "type": "FILE", "modificationTime": 0, "permission": "read", }, { "path": "bar", "length": 4 * 1024, "type": "DIRECTORY", "modificationTime": 0, "permission": "read", }, ] } } async def handler(request: web.Request) -> web.Response: assert "b3" in request.headers assert request.path == "/storage/user/folder" assert request.query == {"op": "LISTSTATUS"} return web.json_response(JSON) app = web.Application() app.router.add_get("/storage/user/folder", handler) srv = await aiohttp_server(app) async with make_client(srv.make_url("/")) as client: ret = [file async for file in client.storage.ls(URL("storage:folder"))] assert ret == [ FileStatus( path="foo", size=1024, type=FileStatusType.FILE, modification_time=0, permission=Action.READ, uri=URL("storage://default/user/folder/foo"), ), FileStatus( path="bar", size=4 * 1024, type=FileStatusType.DIRECTORY, modification_time=0, permission=Action.READ, uri=URL("storage://default/user/folder/bar"), ), ]
async def test_storage_stats(aiohttp_server: _TestServerFactory, make_client: _MakeClient) -> None: async def handler(request: web.Request) -> web.Response: assert request.path == "/storage/user/folder" assert request.query == {"op": "GETFILESTATUS"} return web.json_response({ "FileStatus": { "path": "/user/folder", "type": "DIRECTORY", "length": 1234, "modificationTime": 3456, "permission": "read", } }) app = web.Application() app.router.add_get("/storage/user/folder", handler) srv = await aiohttp_server(app) async with make_client(srv.make_url("/")) as client: stats = await client.storage.stat(URL("storage://~/folder")) assert stats == FileStatus( path="/user/folder", type=FileStatusType.DIRECTORY, size=1234, modification_time=3456, permission=Action.READ, )
def test_has_quote(self) -> None: painter = QuotedPainter() file = FileStatus( "File1'2", 2048, FileStatusType.FILE, int(time.mktime(time.strptime("2018-01-01 03:00:00", "%Y-%m-%d %H:%M:%S"))), Action.READ, ) assert painter.paint(file.name, file.type) == '''"File1'2"'''
def test_simple(self) -> None: painter = NonePainter() file = FileStatus( "File1", 2048, FileStatusType.FILE, int(time.mktime(time.strptime("2018-01-01 03:00:00", "%Y-%m-%d %H:%M:%S"))), Action.READ, ) assert painter.paint(file.name, file.type) == file.name
class TestFilesFormatter: files = [ FileStatus( "File1", 2048, FileStatusType.FILE, int(time.mktime(time.strptime("2018-01-01 03:00:00", "%Y-%m-%d %H:%M:%S"))), Action.READ, ), FileStatus( "File2", 1024, FileStatusType.FILE, int(time.mktime(time.strptime("2018-10-10 13:10:10", "%Y-%m-%d %H:%M:%S"))), Action.READ, ), FileStatus( "File3 with space", 1_024_001, FileStatusType.FILE, int(time.mktime(time.strptime("2019-02-02 05:02:02", "%Y-%m-%d %H:%M:%S"))), Action.READ, ), ] folders = [ FileStatus( "Folder1", 0, FileStatusType.DIRECTORY, int(time.mktime(time.strptime("2017-03-03 06:03:03", "%Y-%m-%d %H:%M:%S"))), Action.MANAGE, ), FileStatus( "1Folder with space", 0, FileStatusType.DIRECTORY, int(time.mktime(time.strptime("2017-03-03 06:03:02", "%Y-%m-%d %H:%M:%S"))), Action.MANAGE, ), ] files_and_folders = files + folders def test_simple_formatter(self) -> None: formatter = SimpleFilesFormatter(color=False) assert list(formatter(self.files_and_folders)) == [ f"{file.name}" for file in self.files_and_folders ] def test_long_formatter(self) -> None: formatter = LongFilesFormatter(human_readable=False, color=False) assert list(formatter(self.files_and_folders)) == [ "-r 2048 2018-01-01 03:00:00 File1", "-r 1024 2018-10-10 13:10:10 File2", "-r 1024001 2019-02-02 05:02:02 File3 with space", "dm 0 2017-03-03 06:03:03 Folder1", "dm 0 2017-03-03 06:03:02 1Folder with space", ] formatter = LongFilesFormatter(human_readable=True, color=False) assert list(formatter(self.files_and_folders)) == [ "-r 2.0K 2018-01-01 03:00:00 File1", "-r 1.0K 2018-10-10 13:10:10 File2", "-r 1000.0K 2019-02-02 05:02:02 File3 with space", "dm 0 2017-03-03 06:03:03 Folder1", "dm 0 2017-03-03 06:03:02 1Folder with space", ] def test_column_formatter(self) -> None: formatter = VerticalColumnsFilesFormatter(width=40, color=False) assert list(formatter(self.files_and_folders)) == [ "File1 Folder1", "File2 1Folder with space", "File3 with space", ] formatter = VerticalColumnsFilesFormatter(width=36, color=False) assert list(formatter(self.files_and_folders)) == [ "File1 Folder1", "File2 1Folder with space", "File3 with space", ] formatter = VerticalColumnsFilesFormatter(width=1, color=False) assert list(formatter(self.files_and_folders)) == [ "File1", "File2", "File3 with space", "Folder1", "1Folder with space", ] @pytest.mark.parametrize( "formatter", [ (SimpleFilesFormatter(color=False)), (VerticalColumnsFilesFormatter(width=100, color=False)), (LongFilesFormatter(human_readable=False, color=False)), ], ) def test_formatter_with_empty_files(self, formatter: BaseFilesFormatter) -> None: files: List[FileStatus] = [] assert [] == list(formatter(files)) def test_sorter(self) -> None: sorter = FilesSorter.NAME files = sorted(self.files_and_folders, key=sorter.key()) assert files == [ self.folders[1], self.files[0], self.files[1], self.files[2], self.folders[0], ] sorter = FilesSorter.SIZE files = sorted(self.files_and_folders, key=sorter.key()) assert files[2:5] == [self.files[1], self.files[0], self.files[2]] sorter = FilesSorter.TIME files = sorted(self.files_and_folders, key=sorter.key()) assert files == [ self.folders[1], self.folders[0], self.files[0], self.files[1], self.files[2], ]