| 796 | return True |
| 797 | |
| 798 | def execute(self, params, **kwargs): |
| 799 | src_path = kwargs['src'] if 'src' in kwargs else None |
| 800 | dst_path = kwargs['dst'] if 'dst' in kwargs else None |
| 801 | |
| 802 | if not src_path or not dst_path: |
| 803 | parser = self.get_parser() |
| 804 | parser.print_help() |
| 805 | return |
| 806 | |
| 807 | if dst_path in params.folder_cache: |
| 808 | dst_folder = params.folder_cache[dst_path] |
| 809 | else: |
| 810 | dst = try_resolve_path(params, dst_path) |
| 811 | if dst is None: |
| 812 | raise CommandError('mv', 'Destination path should be existing folder') |
| 813 | dst_folder, name = dst |
| 814 | if len(name) > 0: |
| 815 | raise CommandError('mv', 'Destination path should be existing folder') |
| 816 | |
| 817 | source = [] # type: List[Tuple[BaseFolderNode, Optional[str]]] # (folder, record_uid) |
| 818 | if src_path in params.record_cache: # record UID |
| 819 | record_uid = src_path |
| 820 | src_folder = None |
| 821 | folder_uids = list(find_folders(params, record_uid)) |
| 822 | if folder_uids: |
| 823 | if params.current_folder: |
| 824 | if params.current_folder in folder_uids: |
| 825 | src_folder = params.folder_cache[params.current_folder] |
| 826 | else: |
| 827 | if '' in params.subfolder_record_cache: |
| 828 | if record_uid in params.subfolder_record_cache['']: |
| 829 | src_folder = params.root_folder |
| 830 | if not src_folder: |
| 831 | src_folder = params.folder_cache[folder_uids[0]] |
| 832 | else: |
| 833 | src_folder = params.root_folder |
| 834 | |
| 835 | if src_folder is dst_folder: |
| 836 | raise CommandError('mv', 'Source and Destination folders are the same') |
| 837 | source.append((src_folder, record_uid)) |
| 838 | elif src_path in params.folder_cache: # folder UID |
| 839 | src_folder = params.folder_cache[src_path] |
| 840 | if src_folder is dst_folder: |
| 841 | raise CommandError('mv', 'Source and Destination folders are the same') |
| 842 | source.append((src_folder, None)) |
| 843 | else: |
| 844 | src = try_resolve_path(params, src_path) |
| 845 | if src is None: |
| 846 | raise CommandError('mv', 'Source path should be existing record or folder') |
| 847 | |
| 848 | src_folder, name = src |
| 849 | if src_folder is dst_folder: |
| 850 | raise CommandError('mv', 'Source and Destination folders are the same') |
| 851 | |
| 852 | if len(name) > 0: |
| 853 | regex = re.compile(fnmatch.translate(name), re.IGNORECASE).match |
| 854 | src_folder_uid = src_folder.uid or '' |
| 855 | if kwargs.get('shared_folder') or kwargs.get('user_folder'): |