Skip to content

User module

Methods attached to the Kili client, to run actions on users.

Source code in kili/presentation/client/user.py
class UserClientMethods(BaseClientMethods):
    """Methods attached to the Kili client, to run actions on users."""

    @overload
    def users(
        self,
        api_key: Optional[str] = None,
        email: Optional[str] = None,
        organization_id: Optional[str] = None,
        fields: ListOrTuple[str] = ("email", "id", "firstname", "lastname"),
        first: Optional[int] = None,
        skip: int = 0,
        disable_tqdm: Optional[bool] = None,
        *,
        as_generator: Literal[True],
    ) -> Generator[Dict, None, None]:
        ...

    @overload
    def users(
        self,
        api_key: Optional[str] = None,
        email: Optional[str] = None,
        organization_id: Optional[str] = None,
        fields: ListOrTuple[str] = ("email", "id", "firstname", "lastname"),
        first: Optional[int] = None,
        skip: int = 0,
        disable_tqdm: Optional[bool] = None,
        *,
        as_generator: Literal[False] = False,
    ) -> List[Dict]:
        ...

    @typechecked
    def users(
        self,
        api_key: Optional[str] = None,
        email: Optional[str] = None,
        organization_id: Optional[str] = None,
        fields: ListOrTuple[str] = ("email", "id", "firstname", "lastname"),
        first: Optional[int] = None,
        skip: int = 0,
        disable_tqdm: Optional[bool] = None,
        *,
        as_generator: bool = False,
    ) -> Iterable[Dict]:
        # pylint: disable=line-too-long
        """Get a generator or a list of users given a set of criteria.

        Args:
            api_key: Query an user by its API Key
            email: Email of the user
            organization_id: Identifier of the user's organization
            fields: All the fields to request among the possible fields for the users.
                See [the documentation](https://docs.kili-technology.com/reference/graphql-api#user) for all possible fields.
            first: Maximum number of users to return
            skip: Number of skipped users (they are ordered by creation date)
            disable_tqdm: If `True`, the progress bar will be disabled
            as_generator: If `True`, a generator on the users is returned.

        Returns:
            An iterable of users.

        Examples:
            ```
            # List all users in my organization
            >>> organization = kili.organizations()[0]
            >>> organization_id = organization['id']
            >>> kili.users(organization_id=organization_id)
            ```
        """
        disable_tqdm = disable_tqdm_if_as_generator(as_generator, disable_tqdm)

        users_gen = UserUseCases(self.kili_api_gateway).list_users(
            filters=UserFilter(
                api_key=api_key,
                email=email,
                organization_id=OrganizationId(organization_id) if organization_id else None,
                activated=None,
                id=None,
                id_in=None,
            ),
            fields=fields,
            options=QueryOptions(disable_tqdm, first, skip),
        )

        if as_generator:
            return users_gen
        return list(users_gen)

    @typechecked
    def count_users(
        self,
        organization_id: Optional[str] = None,
        api_key: Optional[str] = None,
        email: Optional[str] = None,
    ) -> int:
        """Get user count based on a set of constraints.

        Args:
            organization_id: Identifier of the user's organization.
            api_key: Filter by API Key.
            email: Filter by email.

        Returns:
            The number of organizations with the parameters provided.
        """
        return UserUseCases(self.kili_api_gateway).count_users(
            UserFilter(
                api_key=api_key,
                email=email,
                organization_id=OrganizationId(organization_id) if organization_id else None,
                activated=None,
                id=None,
                id_in=None,
            )
        )

    @typechecked
    def create_user(
        self,
        email: str,
        password: str,
        organization_role: OrganizationRole,
        firstname: Optional[str] = None,
        lastname: Optional[str] = None,
    ) -> Dict[Literal["id"], str]:
        """Add a user to your organization.

        Args:
            email: Email of the new user, used as user's unique identifier.
            password: On the first sign in, he will use this password and be able to change it.
            organization_role: One of "ADMIN", "USER".
            firstname: First name of the new user.
            lastname: Last name of the new user.

        Returns:
            A dictionary with the id of the new user.
        """
        return UserUseCases(self.kili_api_gateway).create_user(
            email=email,
            password=password,
            organization_role=organization_role,
            firstname=firstname,
            lastname=lastname,
            fields=("id",),
        )

    @typechecked
    def update_password(
        self, email: str, old_password: str, new_password_1: str, new_password_2: str
    ) -> Dict[Literal["id"], str]:
        """Allow to modify the password that you use to connect to Kili.

        This resolver only works for on-premise installations without Auth0.

        Args:
            email: Email of the person whose password has to be updated.
            old_password: The old password
            new_password_1: The new password
            new_password_2: A confirmation field for the new password

        Returns:
            A dict with the user id.
        """
        return UserUseCases(self.kili_api_gateway).update_password(
            old_password=old_password,
            new_password_1=new_password_1,
            new_password_2=new_password_2,
            user_filter=UserFilter(
                email=email, activated=None, api_key=None, id=None, id_in=None, organization_id=None
            ),
            fields=("id",),
        )

    @typechecked
    def update_properties_in_user(
        self,
        email: str,
        firstname: Optional[str] = None,
        lastname: Optional[str] = None,
        organization_id: Optional[str] = None,
        organization_role: Optional[OrganizationRole] = None,
        activated: Optional[bool] = None,
    ) -> Dict[Literal["id"], str]:
        """Update the properties of a user.

        Args:
            email: The email is the identifier of the user.
            firstname: Change the first name of the user.
            lastname: Change the last name of the user.
            organization_id: Change the organization the user is related to.
            organization_role: Change the role of the user.
                One of "ADMIN", "TEAM_MANAGER", "REVIEWER", "LABELER".
            activated: In case we want to deactivate a user, but keep it.

        Returns:
            A dict with the user id.
        """
        return UserUseCases(self.kili_api_gateway).update_user(
            user_filter=UserFilter(
                email=email, activated=None, api_key=None, id=None, id_in=None, organization_id=None
            ),
            firstname=firstname,
            lastname=lastname,
            organization_id=OrganizationId(organization_id) if organization_id else None,
            organization_role=organization_role,
            activated=activated,
            fields=("id",),
        )

count_users(self, organization_id=None, api_key=None, email=None)

Get user count based on a set of constraints.

Parameters:

Name Type Description Default
organization_id Optional[str]

Identifier of the user's organization.

None
api_key Optional[str]

Filter by API Key.

None
email Optional[str]

Filter by email.

None

Returns:

Type Description
int

The number of organizations with the parameters provided.

Source code in kili/presentation/client/user.py
def count_users(
    self,
    organization_id: Optional[str] = None,
    api_key: Optional[str] = None,
    email: Optional[str] = None,
) -> int:
    """Get user count based on a set of constraints.

    Args:
        organization_id: Identifier of the user's organization.
        api_key: Filter by API Key.
        email: Filter by email.

    Returns:
        The number of organizations with the parameters provided.
    """
    return UserUseCases(self.kili_api_gateway).count_users(
        UserFilter(
            api_key=api_key,
            email=email,
            organization_id=OrganizationId(organization_id) if organization_id else None,
            activated=None,
            id=None,
            id_in=None,
        )
    )

create_user(self, email, password, organization_role, firstname=None, lastname=None)

Add a user to your organization.

Parameters:

Name Type Description Default
email str

Email of the new user, used as user's unique identifier.

required
password str

On the first sign in, he will use this password and be able to change it.

required
organization_role Literal['ADMIN', 'USER']

One of "ADMIN", "USER".

required
firstname Optional[str]

First name of the new user.

None
lastname Optional[str]

Last name of the new user.

None

Returns:

Type Description
Dict[Literal['id'], str]

A dictionary with the id of the new user.

Source code in kili/presentation/client/user.py
def create_user(
    self,
    email: str,
    password: str,
    organization_role: OrganizationRole,
    firstname: Optional[str] = None,
    lastname: Optional[str] = None,
) -> Dict[Literal["id"], str]:
    """Add a user to your organization.

    Args:
        email: Email of the new user, used as user's unique identifier.
        password: On the first sign in, he will use this password and be able to change it.
        organization_role: One of "ADMIN", "USER".
        firstname: First name of the new user.
        lastname: Last name of the new user.

    Returns:
        A dictionary with the id of the new user.
    """
    return UserUseCases(self.kili_api_gateway).create_user(
        email=email,
        password=password,
        organization_role=organization_role,
        firstname=firstname,
        lastname=lastname,
        fields=("id",),
    )

update_password(self, email, old_password, new_password_1, new_password_2)

Allow to modify the password that you use to connect to Kili.

This resolver only works for on-premise installations without Auth0.

Parameters:

Name Type Description Default
email str

Email of the person whose password has to be updated.

required
old_password str

The old password

required
new_password_1 str

The new password

required
new_password_2 str

A confirmation field for the new password

required

Returns:

Type Description
Dict[Literal['id'], str]

A dict with the user id.

Source code in kili/presentation/client/user.py
def update_password(
    self, email: str, old_password: str, new_password_1: str, new_password_2: str
) -> Dict[Literal["id"], str]:
    """Allow to modify the password that you use to connect to Kili.

    This resolver only works for on-premise installations without Auth0.

    Args:
        email: Email of the person whose password has to be updated.
        old_password: The old password
        new_password_1: The new password
        new_password_2: A confirmation field for the new password

    Returns:
        A dict with the user id.
    """
    return UserUseCases(self.kili_api_gateway).update_password(
        old_password=old_password,
        new_password_1=new_password_1,
        new_password_2=new_password_2,
        user_filter=UserFilter(
            email=email, activated=None, api_key=None, id=None, id_in=None, organization_id=None
        ),
        fields=("id",),
    )

update_properties_in_user(self, email, firstname=None, lastname=None, organization_id=None, organization_role=None, activated=None)

Update the properties of a user.

Parameters:

Name Type Description Default
email str

The email is the identifier of the user.

required
firstname Optional[str]

Change the first name of the user.

None
lastname Optional[str]

Change the last name of the user.

None
organization_id Optional[str]

Change the organization the user is related to.

None
organization_role Optional[Literal['ADMIN', 'USER']]

Change the role of the user. One of "ADMIN", "TEAM_MANAGER", "REVIEWER", "LABELER".

None
activated Optional[bool]

In case we want to deactivate a user, but keep it.

None

Returns:

Type Description
Dict[Literal['id'], str]

A dict with the user id.

Source code in kili/presentation/client/user.py
def update_properties_in_user(
    self,
    email: str,
    firstname: Optional[str] = None,
    lastname: Optional[str] = None,
    organization_id: Optional[str] = None,
    organization_role: Optional[OrganizationRole] = None,
    activated: Optional[bool] = None,
) -> Dict[Literal["id"], str]:
    """Update the properties of a user.

    Args:
        email: The email is the identifier of the user.
        firstname: Change the first name of the user.
        lastname: Change the last name of the user.
        organization_id: Change the organization the user is related to.
        organization_role: Change the role of the user.
            One of "ADMIN", "TEAM_MANAGER", "REVIEWER", "LABELER".
        activated: In case we want to deactivate a user, but keep it.

    Returns:
        A dict with the user id.
    """
    return UserUseCases(self.kili_api_gateway).update_user(
        user_filter=UserFilter(
            email=email, activated=None, api_key=None, id=None, id_in=None, organization_id=None
        ),
        firstname=firstname,
        lastname=lastname,
        organization_id=OrganizationId(organization_id) if organization_id else None,
        organization_role=organization_role,
        activated=activated,
        fields=("id",),
    )

users(self, api_key=None, email=None, organization_id=None, fields=('email', 'id', 'firstname', 'lastname'), first=None, skip=0, disable_tqdm=None, *, as_generator=False)

Get a generator or a list of users given a set of criteria.

Parameters:

Name Type Description Default
api_key Optional[str]

Query an user by its API Key

None
email Optional[str]

Email of the user

None
organization_id Optional[str]

Identifier of the user's organization

None
fields Union[List[str], Tuple[str, ...]]

All the fields to request among the possible fields for the users. See the documentation for all possible fields.

('email', 'id', 'firstname', 'lastname')
first Optional[int]

Maximum number of users to return

None
skip int

Number of skipped users (they are ordered by creation date)

0
disable_tqdm Optional[bool]

If True, the progress bar will be disabled

None
as_generator bool

If True, a generator on the users is returned.

False

Returns:

Type Description
Iterable[Dict]

An iterable of users.

Examples:

# List all users in my organization
>>> organization = kili.organizations()[0]
>>> organization_id = organization['id']
>>> kili.users(organization_id=organization_id)
Source code in kili/presentation/client/user.py
def users(
    self,
    api_key: Optional[str] = None,
    email: Optional[str] = None,
    organization_id: Optional[str] = None,
    fields: ListOrTuple[str] = ("email", "id", "firstname", "lastname"),
    first: Optional[int] = None,
    skip: int = 0,
    disable_tqdm: Optional[bool] = None,
    *,
    as_generator: bool = False,
) -> Iterable[Dict]:
    # pylint: disable=line-too-long
    """Get a generator or a list of users given a set of criteria.

    Args:
        api_key: Query an user by its API Key
        email: Email of the user
        organization_id: Identifier of the user's organization
        fields: All the fields to request among the possible fields for the users.
            See [the documentation](https://docs.kili-technology.com/reference/graphql-api#user) for all possible fields.
        first: Maximum number of users to return
        skip: Number of skipped users (they are ordered by creation date)
        disable_tqdm: If `True`, the progress bar will be disabled
        as_generator: If `True`, a generator on the users is returned.

    Returns:
        An iterable of users.

    Examples:
        ```
        # List all users in my organization
        >>> organization = kili.organizations()[0]
        >>> organization_id = organization['id']
        >>> kili.users(organization_id=organization_id)
        ```
    """
    disable_tqdm = disable_tqdm_if_as_generator(as_generator, disable_tqdm)

    users_gen = UserUseCases(self.kili_api_gateway).list_users(
        filters=UserFilter(
            api_key=api_key,
            email=email,
            organization_id=OrganizationId(organization_id) if organization_id else None,
            activated=None,
            id=None,
            id_in=None,
        ),
        fields=fields,
        options=QueryOptions(disable_tqdm, first, skip),
    )

    if as_generator:
        return users_gen
    return list(users_gen)