| 1287 | return dump_report_data(table, headers, title=title, fmt=fmt, filename=out) |
| 1288 | |
| 1289 | def execute(self, params, **kwargs): |
| 1290 | verbose = kwargs.get('verbose') is True |
| 1291 | show_team_users = kwargs.get('show_team_users') is True |
| 1292 | if show_team_users: |
| 1293 | verbose = True |
| 1294 | output_format = kwargs.get('format', 'table') |
| 1295 | user_filter = set() |
| 1296 | record_filter = set() |
| 1297 | |
| 1298 | if kwargs.get('folders'): |
| 1299 | report = ShareReportCommand.sf_report( |
| 1300 | params, |
| 1301 | out=kwargs.get('output'), |
| 1302 | fmt=kwargs.get('format'), |
| 1303 | show_team_users=show_team_users |
| 1304 | ) |
| 1305 | return report |
| 1306 | |
| 1307 | containers = kwargs.get('container') or [] |
| 1308 | containers = [get_folder_uids(params, container) for container in containers] |
| 1309 | containers = [uid for uids in containers for uid in uids] |
| 1310 | containers = [uid for uid in containers if uid] |
| 1311 | recs_by_containers = {k: v for c in containers for k, v in get_contained_record_uids(params, c, False).items()} |
| 1312 | contained_records = {r for k, recs in recs_by_containers.items() for r in recs} |
| 1313 | |
| 1314 | if kwargs.get('record'): |
| 1315 | records = kwargs.get('record') or [] |
| 1316 | for r in records: |
| 1317 | if r in params.record_cache: |
| 1318 | record_filter.add(r) |
| 1319 | else: |
| 1320 | r_uid = None |
| 1321 | rs = try_resolve_path(params, r) |
| 1322 | if rs is not None: |
| 1323 | sf, name = rs |
| 1324 | if name: |
| 1325 | shared_folder_uid = sf.uid or '' |
| 1326 | if shared_folder_uid in params.subfolder_record_cache: |
| 1327 | for uid in params.subfolder_record_cache[shared_folder_uid]: |
| 1328 | rec = api.get_record(params, uid) |
| 1329 | if name in {rec.title, rec.record_uid}: |
| 1330 | r_uid = rec.record_uid |
| 1331 | break |
| 1332 | if r_uid: |
| 1333 | record_filter.add(r_uid) |
| 1334 | else: |
| 1335 | raise CommandError('share-report', '\'{0}\' is not an existing record title or UID'.format(r)) |
| 1336 | |
| 1337 | record_uids = {x for x in record_filter} |
| 1338 | elif kwargs.get('user'): |
| 1339 | for u in kwargs['user']: |
| 1340 | user_filter.add(u) |
| 1341 | |
| 1342 | record_uids = {x['record_uid'] for x in params.record_cache.values() if x['shared']} |
| 1343 | else: |
| 1344 | record_uids = {x['record_uid'] for x in params.record_cache.values() if x['shared']} |
| 1345 | |
| 1346 | record_uids = record_uids.intersection(contained_records) if contained_records else record_uids |