1- from typing import List , Optional
1+ from typing import TYPE_CHECKING , List , Optional
22
33from labelbox .exceptions import LabelboxError
44from labelbox import utils
55from labelbox .orm .db_object import DbObject , query , Entity
66from labelbox .orm .model import Field , Relationship
7- from labelbox .schema .iam_integration import IAMIntegration
8- from labelbox .schema .invite import Invite , InviteLimit , ProjectRole
9- from labelbox .schema .user import User
10- from labelbox .schema .role import Role
7+
8+ if TYPE_CHECKING :
9+ from labelbox import Role , User , ProjectRole , Invite , InviteLimit , IAMIntegration
1110
1211
1312class Organization (DbObject ):
@@ -46,8 +45,8 @@ def __init__(self, *args, **kwargs):
4645 def invite_user (
4746 self ,
4847 email : str ,
49- role : Role ,
50- project_roles : Optional [List [ProjectRole ]] = None ) -> Invite :
48+ role : " Role" ,
49+ project_roles : Optional [List [" ProjectRole" ]] = None ) -> " Invite" :
5150 """
5251 Invite a new member to the org. This will send the user an email invite
5352
@@ -73,7 +72,7 @@ def invite_user(
7372 data_param = "data"
7473 query_str = """mutation createInvitesPyApi($%s: [CreateInviteInput!]){
7574 createInvites(data: $%s){ invite { id createdAt organizationRoleName inviteeEmail inviter { %s } }}}""" % (
76- data_param , data_param , query .results_query_part (User ))
75+ data_param , data_param , query .results_query_part (Entity . User ))
7776
7877 projects = [{
7978 "projectId" : project_role .project .uid ,
@@ -93,9 +92,9 @@ def invite_user(
9392 invite_response = res ['createInvites' ][0 ]['invite' ]
9493 if not invite_response :
9594 raise LabelboxError (f"Unable to send invite for email { email } " )
96- return Invite (self .client , invite_response )
95+ return Entity . Invite (self .client , invite_response )
9796
98- def invite_limit (self ) -> InviteLimit :
97+ def invite_limit (self ) -> " InviteLimit" :
9998 """ Retrieve invite limits for the org
10099 This already accounts for users currently in the org
101100 Meaining that `used = users + invites, remaining = limit - (users + invites)`
@@ -109,10 +108,10 @@ def invite_limit(self) -> InviteLimit:
109108 """query InvitesLimitPyApi($%s: ID!) {
110109 invitesLimit(where: {id: $%s}) { used limit remaining }
111110 }""" % (org_id_param , org_id_param ), {org_id_param : self .uid })
112- return InviteLimit (
111+ return Entity . InviteLimit (
113112 ** {utils .snake_case (k ): v for k , v in res ['invitesLimit' ].items ()})
114113
115- def remove_user (self , user : User ) -> None :
114+ def remove_user (self , user : " User" ) -> None :
116115 """
117116 Deletes a user from the organization. This cannot be undone without sending another invite.
118117
@@ -126,7 +125,7 @@ def remove_user(self, user: User) -> None:
126125 updateUser(where: {id: $%s}, data: {deleted: true}) { id deleted }
127126 }""" % (user_id_param , user_id_param ), {user_id_param : user .uid })
128127
129- def get_iam_integrations (self ) -> List [IAMIntegration ]:
128+ def get_iam_integrations (self ) -> List [" IAMIntegration" ]:
130129 """
131130 Returns all IAM Integrations for an organization
132131 """
@@ -145,7 +144,7 @@ def get_iam_integrations(self) -> List[IAMIntegration]:
145144 for integration_data in res ['iamIntegrations' ]
146145 ]
147146
148- def get_default_iam_integration (self ) -> Optional [IAMIntegration ]:
147+ def get_default_iam_integration (self ) -> Optional [" IAMIntegration" ]:
149148 """
150149 Returns the default IAM integration for the organization.
151150 Will return None if there are no default integrations for the org.
0 commit comments