(self, params, **kwargs)
| 2680 | return record_history_parser |
| 2681 | |
| 2682 | def execute(self, params, **kwargs): |
| 2683 | record_name = kwargs['record'] if 'record' in kwargs else None |
| 2684 | if not record_name: |
| 2685 | self.get_parser().print_help() |
| 2686 | return |
| 2687 | |
| 2688 | verbose = kwargs.get('verbose') or False |
| 2689 | |
| 2690 | record_uid = None |
| 2691 | if record_name in params.record_cache: |
| 2692 | record_uid = record_name |
| 2693 | else: |
| 2694 | rs = try_resolve_path(params, record_name) |
| 2695 | if rs is not None: |
| 2696 | folder, record_name = rs |
| 2697 | if folder is not None and record_name is not None: |
| 2698 | folder_uid = folder.uid or '' |
| 2699 | if folder_uid in params.subfolder_record_cache: |
| 2700 | for uid in params.subfolder_record_cache[folder_uid]: |
| 2701 | r = api.get_record(params, uid) |
| 2702 | if r.title.lower() == record_name.lower(): |
| 2703 | record_uid = uid |
| 2704 | break |
| 2705 | |
| 2706 | if record_uid is None: |
| 2707 | raise CommandError('history', 'Enter name of existing record') |
| 2708 | |
| 2709 | history = self.load_record_history(params, record_uid) |
| 2710 | if isinstance(history, list): |
| 2711 | action = kwargs.get('action') or 'list' |
| 2712 | length = len(history) |
| 2713 | if length == 0: |
| 2714 | logging.info('Record does not have history of edit') |
| 2715 | return |
| 2716 | |
| 2717 | if action == 'list': |
| 2718 | fmt = kwargs.get('format') or '' |
| 2719 | headers = ['version', 'modified_by', 'time_modified'] |
| 2720 | if fmt != 'json': |
| 2721 | headers = [base.field_to_title(x) for x in headers] |
| 2722 | rows = [] |
| 2723 | for i, version in enumerate(history): |
| 2724 | dt = None |
| 2725 | if 'client_modified_time' in version: |
| 2726 | dt = datetime.datetime.fromtimestamp(int(version['client_modified_time'] / 1000.0)) |
| 2727 | rows.append([f'V.{length-i}' if i > 0 else 'Current', version.get('user_name') or '', dt]) |
| 2728 | return base.dump_report_data(rows, headers, fmt=fmt, filename=kwargs.get('output')) |
| 2729 | |
| 2730 | revision = kwargs.get('revision') or 0 |
| 2731 | if revision < 0 or revision >= length: |
| 2732 | raise ValueError(f'Invalid revision {revision}: valid revisions 1..{length - 1}') |
| 2733 | |
| 2734 | index = 0 if revision == 0 else length - revision |
| 2735 | |
| 2736 | if action == 'view': |
| 2737 | rev = history[index] |
| 2738 | record = vault.KeeperRecord.load(params, rev) |
| 2739 | fmt = kwargs.get('format') or '' |
nothing calls this directly
no test coverage detected