(self, params, **kwargs)
| 2615 | return record_history_parser |
| 2616 | |
| 2617 | def execute(self, params, **kwargs): |
| 2618 | record_name = kwargs['record'] if 'record' in kwargs else None |
| 2619 | if not record_name: |
| 2620 | self.get_parser().print_help() |
| 2621 | return |
| 2622 | |
| 2623 | verbose = kwargs.get('verbose') or False |
| 2624 | |
| 2625 | record_uid = None |
| 2626 | if record_name in params.record_cache: |
| 2627 | record_uid = record_name |
| 2628 | else: |
| 2629 | rs = try_resolve_path(params, record_name) |
| 2630 | if rs is not None: |
| 2631 | folder, record_name = rs |
| 2632 | if folder is not None and record_name is not None: |
| 2633 | folder_uid = folder.uid or '' |
| 2634 | if folder_uid in params.subfolder_record_cache: |
| 2635 | for uid in params.subfolder_record_cache[folder_uid]: |
| 2636 | r = api.get_record(params, uid) |
| 2637 | if r.title.lower() == record_name.lower(): |
| 2638 | record_uid = uid |
| 2639 | break |
| 2640 | |
| 2641 | if record_uid is None: |
| 2642 | raise CommandError('history', 'Enter name of existing record') |
| 2643 | |
| 2644 | history = self.load_record_history(params, record_uid) |
| 2645 | if isinstance(history, list): |
| 2646 | action = kwargs.get('action') or 'list' |
| 2647 | length = len(history) |
| 2648 | if length == 0: |
| 2649 | logging.info('Record does not have history of edit') |
| 2650 | return |
| 2651 | |
| 2652 | if action == 'list': |
| 2653 | fmt = kwargs.get('format') or '' |
| 2654 | headers = ['version', 'modified_by', 'time_modified'] |
| 2655 | if fmt != 'json': |
| 2656 | headers = [base.field_to_title(x) for x in headers] |
| 2657 | rows = [] |
| 2658 | for i, version in enumerate(history): |
| 2659 | dt = None |
| 2660 | if 'client_modified_time' in version: |
| 2661 | dt = datetime.datetime.fromtimestamp(int(version['client_modified_time'] / 1000.0)) |
| 2662 | rows.append([f'V.{length-i}' if i > 0 else 'Current', version.get('user_name') or '', dt]) |
| 2663 | return base.dump_report_data(rows, headers, fmt=fmt, filename=kwargs.get('output')) |
| 2664 | |
| 2665 | revision = kwargs.get('revision') or 0 |
| 2666 | if revision < 0 or revision >= length: |
| 2667 | raise ValueError(f'Invalid revision {revision}: valid revisions 1..{length - 1}') |
| 2668 | |
| 2669 | index = 0 if revision == 0 else length - revision |
| 2670 | |
| 2671 | if action == 'view': |
| 2672 | rev = history[index] |
| 2673 | record = vault.KeeperRecord.load(params, rev) |
| 2674 |
nothing calls this directly
no test coverage detected