| 1594 | return dump_report_data(table, headers, title=title, fmt=fmt, filename=out) |
| 1595 | |
| 1596 | def execute(self, params, **kwargs): |
| 1597 | verbose = kwargs.get('verbose') is True |
| 1598 | show_team_users = kwargs.get('show_team_users') is True |
| 1599 | if show_team_users: |
| 1600 | verbose = True |
| 1601 | output_format = kwargs.get('format', 'table') |
| 1602 | user_filter = set() |
| 1603 | record_filter = set() |
| 1604 | |
| 1605 | if kwargs.get('folders'): |
| 1606 | report = ShareReportCommand.sf_report( |
| 1607 | params, |
| 1608 | out=kwargs.get('output'), |
| 1609 | fmt=kwargs.get('format'), |
| 1610 | show_team_users=show_team_users |
| 1611 | ) |
| 1612 | return report |
| 1613 | |
| 1614 | containers = kwargs.get('container') or [] |
| 1615 | containers = [get_folder_uids(params, container) for container in containers] |
| 1616 | containers = [uid for uids in containers for uid in uids] |
| 1617 | containers = [uid for uid in containers if uid] |
| 1618 | recs_by_containers = {k: v for c in containers for k, v in get_contained_record_uids(params, c, False).items()} |
| 1619 | contained_records = {r for k, recs in recs_by_containers.items() for r in recs} |
| 1620 | |
| 1621 | if kwargs.get('record'): |
| 1622 | records = kwargs.get('record') or [] |
| 1623 | for r in records: |
| 1624 | if r in params.record_cache: |
| 1625 | record_filter.add(r) |
| 1626 | else: |
| 1627 | r_uid = None |
| 1628 | rs = try_resolve_path(params, r) |
| 1629 | if rs is not None: |
| 1630 | sf, name = rs |
| 1631 | if name: |
| 1632 | shared_folder_uid = sf.uid or '' |
| 1633 | if shared_folder_uid in params.subfolder_record_cache: |
| 1634 | for uid in params.subfolder_record_cache[shared_folder_uid]: |
| 1635 | rec = api.get_record(params, uid) |
| 1636 | if name in {rec.title, rec.record_uid}: |
| 1637 | r_uid = rec.record_uid |
| 1638 | break |
| 1639 | if r_uid: |
| 1640 | record_filter.add(r_uid) |
| 1641 | else: |
| 1642 | raise CommandError('share-report', '\'{0}\' is not an existing record title or UID'.format(r)) |
| 1643 | |
| 1644 | record_uids = {x for x in record_filter} |
| 1645 | elif kwargs.get('user'): |
| 1646 | for u in kwargs['user']: |
| 1647 | user_filter.add(u) |
| 1648 | |
| 1649 | record_uids = {x['record_uid'] for x in params.record_cache.values() if x['shared']} |
| 1650 | else: |
| 1651 | record_uids = {x['record_uid'] for x in params.record_cache.values() if x['shared']} |
| 1652 | |
| 1653 | record_uids = record_uids.intersection(contained_records) if contained_records else record_uids |