|
31 | 31 | from labelbox.schema.identifiable import UniqueId, GlobalKey
|
32 | 32 | from labelbox.schema.task import Task
|
33 | 33 | from labelbox.schema.user import User
|
| 34 | +from labelbox.schema.iam_integration import IAMIntegration |
34 | 35 |
|
35 | 36 | logger = logging.getLogger(__name__)
|
36 | 37 |
|
@@ -912,3 +913,80 @@ def _convert_items_to_upsert_format(self, _items):
|
912 | 913 | } # remove None values
|
913 | 914 | _upsert_items.append(DataRowUpsertItem(payload=item, id=key))
|
914 | 915 | return _upsert_items
|
| 916 | + |
| 917 | + def set_iam_integration(self, iam_integration: Union[str, IAMIntegration, None] = None) -> Optional[IAMIntegration]: |
| 918 | + """ |
| 919 | + Sets the IAM integration for the dataset. IAM integration is used to sign URLs for data row assets. |
| 920 | +
|
| 921 | + >>> # Get all IAM integrations |
| 922 | + >>> iam_integrations = client.get_organization().get_iam_integrations() |
| 923 | + >>> |
| 924 | + >>> # Get IAM integration id |
| 925 | + >>> iam_integration_id = [integration.uid for integration |
| 926 | + >>> in iam_integrations |
| 927 | + >>> if integration.name == "My S3 integration"][0] |
| 928 | + >>> |
| 929 | + >>> # Set IAM integration for integration id |
| 930 | + >>> dataset.set_iam_integration(iam_integration_id) |
| 931 | + >>> |
| 932 | + >>> # Get IAM integration object |
| 933 | + >>> iam_integration = [integration.uid for integration |
| 934 | + >>> in iam_integrations |
| 935 | + >>> if integration.name == "My S3 integration"][0] |
| 936 | + >>> |
| 937 | + >>> # Set IAM integration for integration object |
| 938 | + >>> dataset.set_iam_integration(iam_integration) |
| 939 | + >>> |
| 940 | + >>> # Unset IAM integration |
| 941 | + >>> dataset.set_iam_integration() |
| 942 | + """ |
| 943 | + |
| 944 | + # Unset IAM integration if iam_integration is None |
| 945 | + if iam_integration is None: |
| 946 | + query = """mutation DetachSignerPyApi($id: ID!) { |
| 947 | + clearSignerForDataset(where: {id: $id}) { |
| 948 | + id |
| 949 | + signer { |
| 950 | + id |
| 951 | + } |
| 952 | + } |
| 953 | + }""" |
| 954 | + response = self.client.execute(query, {"id": self.uid}) |
| 955 | + |
| 956 | + if response: |
| 957 | + return response["clearSignerForDataset"]["signer"] |
| 958 | + else: |
| 959 | + raise lb.exceptions.LabelboxError("Can't unset IAM integration") |
| 960 | + |
| 961 | + else: |
| 962 | + |
| 963 | + if isinstance(iam_integration, IAMIntegration): |
| 964 | + iam_integration_id = iam_integration.uid |
| 965 | + else: |
| 966 | + iam_integration_id = iam_integration |
| 967 | + |
| 968 | + query = """mutation AttachSignerPyApi($signerId: ID!, $datasetId: ID!) { |
| 969 | + setSignerForDataset(data: {signerId: $signerId}, where: {id: $datasetId}) { |
| 970 | + id |
| 971 | + signer { |
| 972 | + id |
| 973 | + } |
| 974 | + } |
| 975 | + }""" |
| 976 | + response = self.client.execute(query, {"signerId": iam_integration_id, "datasetId": self.uid}) |
| 977 | + |
| 978 | + # Return IAM Integration object if |
| 979 | + if response: |
| 980 | + try: |
| 981 | + |
| 982 | + iam_integration_id = response.get("setSignerForDataset", {}).get("signer", {})["id"] |
| 983 | + return [integration for integration |
| 984 | + in self.client.get_organization().get_iam_integrations() |
| 985 | + if integration.uid == iam_integration_id][0] |
| 986 | + except: |
| 987 | + raise LabelboxError(f"Can't retrieve IAM integration {iam_integration_id}") |
| 988 | + |
| 989 | + else: |
| 990 | + raise LabelboxError(f"Can't set IAM integration {iam_integration_id}") |
| 991 | + |
| 992 | + return response |
0 commit comments