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