add -p option for support to open PW_OPEN folder.
This commit is contained in:
@ -35,13 +35,17 @@ class BaseCommand(ABC):
|
||||
raise IllegalArgumentException(f"Laboratory `{name}` not found.")
|
||||
return laboratory
|
||||
|
||||
def _find_folder(self, connection: MDRSConnection, laboratory: Laboratory, path: str) -> Folder:
|
||||
def _find_folder(
|
||||
self, connection: MDRSConnection, laboratory: Laboratory, path: str, password: str | None = None
|
||||
) -> Folder:
|
||||
folder_api = FolderApi(connection)
|
||||
folders = folder_api.list(laboratory.id, path)
|
||||
if len(folders) != 1:
|
||||
raise UnexpectedException(f"Folder `{path}` not found.")
|
||||
if folders[0].lock:
|
||||
raise UnauthorizedException(f"Folder `{path}` is locked.")
|
||||
if password is None:
|
||||
raise UnauthorizedException(f"Folder `{path}` is locked.")
|
||||
folder_api.auth(folders[0].id, password)
|
||||
return folder_api.retrieve(folders[0].id)
|
||||
|
||||
def _parse_remote_host(self, path: str) -> str:
|
||||
|
@ -26,6 +26,7 @@ class DownloadCommand(BaseCommand):
|
||||
download_parser.add_argument(
|
||||
"-r", "--recursive", help="download folders and their contents recursive", action="store_true"
|
||||
)
|
||||
download_parser.add_argument("-p", "--password", help="password to use when open locked folder")
|
||||
download_parser.add_argument("remote_path", help="remote file path (remote:/lab/path/file)")
|
||||
download_parser.add_argument("local_path", help="local folder path (/foo/bar/)")
|
||||
download_parser.set_defaults(func=command.download)
|
||||
@ -40,7 +41,7 @@ class DownloadCommand(BaseCommand):
|
||||
if not os.path.isdir(l_dirname):
|
||||
raise IllegalArgumentException(f"Local directory `{args.local_path}` not found.")
|
||||
laboratory = self._find_laboratory(connection, laboratory_name)
|
||||
r_parent_folder = self._find_folder(connection, laboratory, r_dirname)
|
||||
r_parent_folder = self._find_folder(connection, laboratory, r_dirname, args.password)
|
||||
file = r_parent_folder.find_file(r_basename)
|
||||
download_files: list[DownloadFileInfo] = []
|
||||
if file is not None:
|
||||
|
@ -11,6 +11,7 @@ class FileMetadataCommand(BaseCommand):
|
||||
def register(cls, parsers: _SubParsersAction) -> None:
|
||||
command = cls()
|
||||
file_metadata_parser = parsers.add_parser("file-metadata", help="get the file metadata")
|
||||
file_metadata_parser.add_argument("-p", "--password", help="password to use when open locked folder")
|
||||
file_metadata_parser.add_argument("remote_path", help="remote file path (remote:/lab/path/file)")
|
||||
file_metadata_parser.set_defaults(func=command.file_metadata)
|
||||
|
||||
@ -21,7 +22,7 @@ class FileMetadataCommand(BaseCommand):
|
||||
r_basename = os.path.basename(r_path)
|
||||
connection = self._create_connection(remote)
|
||||
laboratory = self._find_laboratory(connection, laboratory_name)
|
||||
folder = self._find_folder(connection, laboratory, r_dirname)
|
||||
folder = self._find_folder(connection, laboratory, r_dirname, args.password)
|
||||
file = folder.find_file(r_basename)
|
||||
if file is None:
|
||||
raise IllegalArgumentException(f"File `{r_basename}` not found.")
|
||||
|
@ -8,6 +8,7 @@ class LsCommand(BaseCommand):
|
||||
def register(cls, parsers: _SubParsersAction) -> None:
|
||||
command = cls()
|
||||
ls_parser = parsers.add_parser("ls", help="list the folder contents")
|
||||
ls_parser.add_argument("-p", "--password", help="password to use when open locked folder")
|
||||
ls_parser.add_argument("remote_path", help="remote folder path (remote:/lab/path/)")
|
||||
ls_parser.set_defaults(func=command.ls)
|
||||
|
||||
@ -15,7 +16,7 @@ class LsCommand(BaseCommand):
|
||||
(remote, laboratory_name, r_path) = self._parse_remote_host_with_path(args.remote_path)
|
||||
connection = self._create_connection(remote)
|
||||
laboratory = self._find_laboratory(connection, laboratory_name)
|
||||
folder = self._find_folder(connection, laboratory, r_path)
|
||||
folder = self._find_folder(connection, laboratory, r_path, args.password)
|
||||
label = {
|
||||
"type": "Type",
|
||||
"acl": "Access",
|
||||
|
@ -9,6 +9,7 @@ class MetadataCommand(BaseCommand):
|
||||
def register(cls, parsers: _SubParsersAction) -> None:
|
||||
command = cls()
|
||||
metadata_parser = parsers.add_parser("metadata", help="get a folder metadata")
|
||||
metadata_parser.add_argument("-p", "--password", help="password to use when open locked folder")
|
||||
metadata_parser.add_argument("remote_path", help="remote folder path (remote:/lab/path/)")
|
||||
metadata_parser.set_defaults(func=command.metadata)
|
||||
|
||||
@ -16,7 +17,7 @@ class MetadataCommand(BaseCommand):
|
||||
(remote, laboratory_name, r_path) = self._parse_remote_host_with_path(args.remote_path)
|
||||
connection = self._create_connection(remote)
|
||||
laboratory = self._find_laboratory(connection, laboratory_name)
|
||||
folder = self._find_folder(connection, laboratory, r_path)
|
||||
folder = self._find_folder(connection, laboratory, r_path, args.password)
|
||||
folder_api = FolderApi(connection)
|
||||
metadata = folder_api.metadata(folder.id)
|
||||
print(metadata)
|
||||
|
Reference in New Issue
Block a user