import os from argparse import Namespace from typing import Any from unicodedata import normalize from mdrsclient.api import FilesApi, FoldersApi from mdrsclient.commands.base import BaseCommand from mdrsclient.exceptions import IllegalArgumentException from mdrsclient.models.file import find_file class CpCommand(BaseCommand): @classmethod def register(cls, parsers: Any) -> None: cp_parser = parsers.add_parser("cp", help="copy the file and folder") cp_parser.add_argument( "-r", "--recursive", help="copy folders and their contents recursive", action="store_true" ) cp_parser.add_argument("src_path", help="source remote path (remote:/lab/path/src)") cp_parser.add_argument("dest_path", help="destination remote path (remote:/lab/path/dest)") cp_parser.set_defaults(func=cls.func) @classmethod def func(cls, args: Namespace) -> None: src_path = str(args.src_path) dest_path = str(args.dest_path) is_recursive = bool(args.recursive) cls.cp(src_path, dest_path, is_recursive) @classmethod def cp(cls, src_path: str, dest_path: str, is_recursive: bool) -> None: remote = src_path.split(":", 1)[0] if ":" in src_path else "" from mdrsclient.client import MdrsClient client = MdrsClient.from_remote(remote) client.cp(src_path, dest_path, is_recursive)