| 822 | return True |
| 823 | |
| 824 | def execute(self, params, **kwargs): |
| 825 | src_path = kwargs['src'] if 'src' in kwargs else None |
| 826 | dst_path = kwargs['dst'] if 'dst' in kwargs else None |
| 827 | |
| 828 | if not src_path or not dst_path: |
| 829 | parser = self.get_parser() |
| 830 | parser.print_help() |
| 831 | return |
| 832 | |
| 833 | if dst_path in params.folder_cache: |
| 834 | dst_folder = params.folder_cache[dst_path] |
| 835 | else: |
| 836 | dst = try_resolve_path(params, dst_path) |
| 837 | if dst is None: |
| 838 | raise CommandError('mv', 'Destination path should be existing folder') |
| 839 | dst_folder, name = dst |
| 840 | if len(name) > 0: |
| 841 | raise CommandError('mv', 'Destination path should be existing folder') |
| 842 | |
| 843 | source = [] # type: List[Tuple[BaseFolderNode, Optional[str]]] # (folder, record_uid) |
| 844 | if src_path in params.record_cache: # record UID |
| 845 | record_uid = src_path |
| 846 | src_folder = None |
| 847 | folder_uids = list(find_folders(params, record_uid)) |
| 848 | if folder_uids: |
| 849 | if params.current_folder: |
| 850 | if params.current_folder in folder_uids: |
| 851 | src_folder = params.folder_cache[params.current_folder] |
| 852 | else: |
| 853 | if '' in params.subfolder_record_cache: |
| 854 | if record_uid in params.subfolder_record_cache['']: |
| 855 | src_folder = params.root_folder |
| 856 | if not src_folder: |
| 857 | src_folder = params.folder_cache[folder_uids[0]] |
| 858 | else: |
| 859 | src_folder = params.root_folder |
| 860 | |
| 861 | if src_folder is dst_folder: |
| 862 | raise CommandError('mv', 'Source and Destination folders are the same') |
| 863 | source.append((src_folder, record_uid)) |
| 864 | elif src_path in params.folder_cache: # folder UID |
| 865 | src_folder = params.folder_cache[src_path] |
| 866 | if src_folder is dst_folder: |
| 867 | raise CommandError('mv', 'Source and Destination folders are the same') |
| 868 | source.append((src_folder, None)) |
| 869 | else: |
| 870 | src = try_resolve_path(params, src_path) |
| 871 | if src is None: |
| 872 | raise CommandError('mv', 'Source path should be existing record or folder') |
| 873 | |
| 874 | src_folder, name = src |
| 875 | if src_folder is dst_folder: |
| 876 | raise CommandError('mv', 'Source and Destination folders are the same') |
| 877 | |
| 878 | if len(name) > 0: |
| 879 | regex = re.compile(fnmatch.translate(name), re.IGNORECASE).match |
| 880 | src_folder_uid = src_folder.uid or '' |
| 881 | if kwargs.get('shared_folder') or kwargs.get('user_folder'): |