(self, params, **kwargs)
| 2215 | return trash_list_parser |
| 2216 | |
| 2217 | def execute(self, params, **kwargs): |
| 2218 | deleted_records = self.get_deleted_records(params, kwargs.get('reload', False)) |
| 2219 | orphaned_records = self.get_orphaned_records(params) |
| 2220 | shared_folders = self.get_shared_folders(params) |
| 2221 | verbose = kwargs.get('verbose') is True |
| 2222 | |
| 2223 | if len(deleted_records) == 0 and len(orphaned_records) == 0 and len(shared_folders) == 0: |
| 2224 | fmt = kwargs.get('format', 'table') |
| 2225 | return handle_empty_result(fmt, 'Trash is empty', kwargs.get('output')) |
| 2226 | |
| 2227 | pattern = kwargs.get('pattern') |
| 2228 | if pattern: |
| 2229 | if pattern == '*': |
| 2230 | pattern = None |
| 2231 | |
| 2232 | title_pattern = None |
| 2233 | if pattern: |
| 2234 | title_pattern = re.compile(fnmatch.translate(pattern), re.IGNORECASE) |
| 2235 | |
| 2236 | record_table = [] |
| 2237 | headers = ['Folder UID', 'Record UID', 'Name', 'Record Type', 'Deleted At', 'Status'] |
| 2238 | |
| 2239 | for shared in (False, True): |
| 2240 | for rec in (orphaned_records if shared else deleted_records).values(): |
| 2241 | record = vault.KeeperRecord.load(params, rec) |
| 2242 | |
| 2243 | if pattern: |
| 2244 | if pattern == record.record_uid: |
| 2245 | pass |
| 2246 | elif title_pattern and title_pattern.match(record.title): |
| 2247 | pass |
| 2248 | else: |
| 2249 | continue |
| 2250 | |
| 2251 | date_deleted = None |
| 2252 | if shared: |
| 2253 | status = 'Share' |
| 2254 | else: |
| 2255 | status = 'Record' |
| 2256 | dd = rec.get('date_deleted', 0) |
| 2257 | if dd: |
| 2258 | date_deleted = datetime.datetime.fromtimestamp(int(dd / 1000)) |
| 2259 | record_table.append(['', record.record_uid, record.title, record.record_type, date_deleted, status]) |
| 2260 | |
| 2261 | record_table.sort(key=lambda x: x[2].casefold()) |
| 2262 | folder_table = [] |
| 2263 | |
| 2264 | if shared_folders and len(shared_folders) > 0: |
| 2265 | folders = shared_folders.get('folders', {}) # type: Dict[str, dict] |
| 2266 | records = shared_folders.get('records', {}) # type: Dict[str, dict] |
| 2267 | if verbose: |
| 2268 | for rec in records.values(): |
| 2269 | folder_uid = rec.get('folder_uid') |
| 2270 | record_uid = rec.get('record_uid') |
| 2271 | record = vault.KeeperRecord.load(params, rec) |
| 2272 | if not record: |
| 2273 | continue |
| 2274 |
nothing calls this directly
no test coverage detected