fix for file.list api pagination
This commit is contained in:
@ -4,7 +4,7 @@ from typing import Any
|
||||
|
||||
from pydantic.dataclasses import dataclass
|
||||
|
||||
from mdrsclient.api import FoldersApi
|
||||
from mdrsclient.api import FilesApi, FoldersApi
|
||||
from mdrsclient.commands.base import BaseCommand
|
||||
from mdrsclient.connection import MDRSConnection
|
||||
from mdrsclient.exceptions import UnauthorizedException
|
||||
@ -67,17 +67,18 @@ class LsCommand(BaseCommand):
|
||||
is_recursive,
|
||||
)
|
||||
folder = cls._find_folder(connection, laboratory, r_path, password)
|
||||
files = cls._find_files(connection, folder.id)
|
||||
if context.is_json:
|
||||
cls._ls_json(context, folder)
|
||||
cls._ls_json(context, folder, files)
|
||||
else:
|
||||
cls._ls_plain(context, folder)
|
||||
cls._ls_plain(context, folder, files)
|
||||
|
||||
@classmethod
|
||||
def _ls_json(cls, context: LsCommandContext, folder: Folder) -> None:
|
||||
print(json.dumps(cls._folder2dict(context, folder), ensure_ascii=False))
|
||||
def _ls_json(cls, context: LsCommandContext, folder: Folder, files: list[File]) -> None:
|
||||
print(json.dumps(cls._folder2dict(context, folder, files), ensure_ascii=False))
|
||||
|
||||
@classmethod
|
||||
def _ls_plain(cls, context: LsCommandContext, folder: Folder) -> None:
|
||||
def _ls_plain(cls, context: LsCommandContext, folder: Folder, files: list[File]) -> None:
|
||||
label = {
|
||||
"type": "Type",
|
||||
"acl": "Access",
|
||||
@ -97,7 +98,7 @@ class LsCommand(BaseCommand):
|
||||
length["size"] = max(length["size"], len(str(folder.size)))
|
||||
length["date"] = max(length["date"], len(sub_folder.updated_at_name))
|
||||
length["name"] = max(length["name"], len(sub_folder.name))
|
||||
for file in folder.files:
|
||||
for file in files:
|
||||
length["size"] = max(length["size"], len(str(file.size)))
|
||||
length["date"] = max(length["date"], len(file.updated_at_name))
|
||||
length["name"] = max(length["name"], len(file.name))
|
||||
@ -111,7 +112,7 @@ class LsCommand(BaseCommand):
|
||||
|
||||
if context.is_recursive:
|
||||
print(f"{context.prefix}{folder.path}:")
|
||||
print(f"total {sum(f.size for f in folder.files)}")
|
||||
print(f"total {sum(f.size for f in files)}")
|
||||
|
||||
if not context.is_quick:
|
||||
print(header)
|
||||
@ -125,7 +126,7 @@ class LsCommand(BaseCommand):
|
||||
f"{sub_laboratory_name:{length['laboratory']}}\t{sub_folder.size:{length['size']}}\t"
|
||||
f"{sub_folder.updated_at_name:{length['date']}}\t{sub_folder.name:{length['name']}}"
|
||||
)
|
||||
for file in sorted(folder.files, key=lambda x: x.name):
|
||||
for file in sorted(files, key=lambda x: x.name):
|
||||
print(
|
||||
f"{'[f]':{length['type']}}\t{folder.access_level_name:{length['acl']}}\t"
|
||||
f"{context.laboratory.name:{length['laboratory']}}\t{file.size:{length['size']}}\t"
|
||||
@ -140,12 +141,15 @@ class LsCommand(BaseCommand):
|
||||
if sub_folder.lock:
|
||||
folder_api.auth(sub_folder.id, context.password)
|
||||
folder = folder_api.retrieve(sub_folder.id)
|
||||
cls._ls_plain(context, folder)
|
||||
files = cls._find_files(context.connection, sub_folder.id)
|
||||
cls._ls_plain(context, folder, files)
|
||||
except UnauthorizedException:
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def _folder2dict(cls, context: LsCommandContext, folder: Folder | FolderSimple) -> dict[str, Any]:
|
||||
def _folder2dict(
|
||||
cls, context: LsCommandContext, folder: Folder | FolderSimple, files: list[File]
|
||||
) -> dict[str, Any]:
|
||||
data: dict[str, Any] = {
|
||||
"id": folder.id,
|
||||
"pid": folder.pid,
|
||||
@ -168,15 +172,16 @@ class LsCommand(BaseCommand):
|
||||
if sub_folder.lock:
|
||||
folder_api.auth(sub_folder.id, context.password)
|
||||
folder2 = folder_api.retrieve(sub_folder.id)
|
||||
sub_folders.append(cls._folder2dict(context, folder2))
|
||||
files2 = cls._find_files(context.connection, sub_folder.id)
|
||||
sub_folders.append(cls._folder2dict(context, folder2, files2))
|
||||
except UnauthorizedException:
|
||||
pass
|
||||
data["sub_folders"] = sub_folders
|
||||
else:
|
||||
data["sub_folders"] = list(
|
||||
map(lambda x: cls._folder2dict(context, x), sorted(folder.sub_folders, key=lambda x: x.name))
|
||||
map(lambda x: cls._folder2dict(context, x, []), sorted(folder.sub_folders, key=lambda x: x.name))
|
||||
)
|
||||
data["files"] = list(map(lambda x: cls._file2dict(context, x), sorted(folder.files, key=lambda x: x.name)))
|
||||
data["files"] = list(map(lambda x: cls._file2dict(context, x), sorted(files, key=lambda x: x.name)))
|
||||
return data
|
||||
|
||||
@classmethod
|
||||
|
Reference in New Issue
Block a user