Skip to content

Commit 36c911b

Browse files
author
Matt Sokoloff
committed
needs to be tested
1 parent b0573f7 commit 36c911b

File tree

4 files changed

+46
-2
lines changed

4 files changed

+46
-2
lines changed

labelbox/client.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# type: ignore
22
from datetime import datetime, timezone
33
import json
4+
from labelbox.schema.iam_integration import IAMIntegration
45
import logging
56
import mimetypes
67
import os
@@ -519,7 +520,27 @@ def create_dataset(self, **kwargs):
519520
InvalidAttributeError: If the Dataset type does not contain
520521
any of the attribute names given in kwargs.
521522
"""
522-
return self._create(Dataset, kwargs)
523+
dataset = self._create(Dataset, kwargs)
524+
#iam_integration = kwargs.get("iam_integration")
525+
iam_integration = kwargs.get('iam_integration') or self.get_organization().get_default_iam_integration()
526+
if iam_integration is not None:
527+
if not isinstance(iam_integration, IAMIntegration):
528+
raise TypeError(f"iam integration must be a reference an `IAMIntegration` object. Found {iam_integration}")
529+
try:
530+
import time
531+
time.sleep(5)
532+
print(iam_integration.uid)
533+
res = self.execute("""mutation setSignerForDatasetPyApi($signerId: ID!, $datasetId: ID!) { setSignerForDataset(data: { signerId: $signerId}, where: {id: $datasetId}){id}} """, {'signerId' : iam_integration.uid, 'datasetId' : dataset.uid})
534+
#result = self.execute("""mutation validateDatasetPyApi($id: ID!){validateDataset(where: {id : $id}){valid checks{name, success}} }""", {'id' : dataset.uid})
535+
# TODO: I am not sure what to do with this check...
536+
#if not result['validateDataset']['valid']:
537+
# raise labelbox.exceptions.LabelboxError(f"Signer was unsuccessfully added to the dataset. {result}")
538+
except Exception as e:
539+
breakpoint()
540+
dataset.delete()
541+
raise e
542+
return dataset
543+
523544

524545
def create_project(self, **kwargs):
525546
""" Creates a Project object on the server.
@@ -617,3 +638,5 @@ def create_model(self, name, ontology_id):
617638
"ontologyId": ontology_id
618639
})
619640
return Model(self, result['createModel'])
641+
642+

labelbox/schema/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,4 @@
1818
import labelbox.schema.user
1919
import labelbox.schema.webhook
2020
import labelbox.schema.data_row_metadata
21+
import labelbox.schema.iam_integration

labelbox/schema/dataset.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from labelbox.schema import iam_integration
12
from labelbox import utils
23
import os
34
import json
@@ -43,6 +44,7 @@ class Dataset(DbObject, Updateable, Deletable):
4344
data_rows = Relationship.ToMany("DataRow", False)
4445
created_by = Relationship.ToOne("User", False, "created_by")
4546
organization = Relationship.ToOne("Organization", False)
47+
iam_integration = Relationship.ToOne("IAMIntegration", False, "iam_integration", "signer")
4648

4749
def create_data_row(self, **kwargs):
4850
""" Creates a single DataRow belonging to this dataset.

labelbox/schema/organization.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from labelbox.exceptions import LabelboxError
44
from labelbox import utils
5-
from labelbox.orm.db_object import DbObject, experimental, query
5+
from labelbox.orm.db_object import DbObject, experimental, query, Entity
66
from labelbox.orm.model import Field, Relationship
77
from labelbox.schema.invite import Invite, InviteLimit, ProjectRole
88
from labelbox.schema.user import User
@@ -129,3 +129,21 @@ def remove_user(self, user: User):
129129
"""mutation DeleteMemberPyApi($%s: ID!) {
130130
updateUser(where: {id: $%s}, data: {deleted: true}) { id deleted }
131131
}""" % (user_id_param, user_id_param), {user_id_param: user.uid})
132+
133+
134+
def get_iam_integrations(self):
135+
"""
136+
Returns all IAM Integrations for an organization
137+
"""
138+
res = self.client.execute("""query getAllIntegrationsPyApi { iamIntegrations {%s} } """ % query.results_query_part(Entity.IAMIntegration))
139+
return [Entity.IAMIntegration(self.client, integration_data) for integration_data in res['iamIntegrations']]
140+
141+
def get_default_iam_integration(self):
142+
"""
143+
Returns the default IAM integration for the organization
144+
"""
145+
integrations = self.get_iam_integrations()
146+
default_integration = [integration for integration in integrations if integration.is_org_default]
147+
if len(default_integration) > 1:
148+
raise ValueError("Found more than one default signer. Please contact Labelbox to resolve")
149+
return None if not len(default_integration) else default_integration.pop()

0 commit comments

Comments
 (0)