Skip to content

User module

Queries

Set of User queries.

Source code in kili/queries/user/__init__.py
class QueriesUser:
    """Set of User queries."""

    # pylint: disable=too-many-arguments,too-many-locals

    def __init__(self, auth):
        """Initialize the subclass.

        Args:
            auth: KiliAuth object
        """
        self.auth = auth

    # pylint: disable=dangerous-default-value
    @typechecked
    def users(
        self,
        api_key: Optional[str] = None,
        email: Optional[str] = None,
        organization_id: Optional[str] = None,
        fields: List[str] = ["email", "id", "firstname", "lastname"],
        first: Optional[int] = None,
        skip: int = 0,
        disable_tqdm: bool = False,
        as_generator: bool = False,
    ) -> Union[List[dict], Generator[dict, None, None]]:
        # 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:
            A result object which contains the query if it was successful,
                or an error message.

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

        count_args = {"organization_id": organization_id}
        disable_tqdm = disable_tqdm or as_generator or (api_key or email) is not None
        payload_query = {
            "where": {
                "apiKey": api_key,
                "email": email,
                "organization": {
                    "id": organization_id,
                },
            }
        }

        users_generator = row_generator_from_paginated_calls(
            skip,
            first,
            self.count_users,
            count_args,
            self._query_users,
            payload_query,
            fields,
            disable_tqdm,
        )

        if as_generator:
            return users_generator
        return list(users_generator)

    def _query_users(self, skip: int, first: int, payload: dict, fields: List[str]):
        payload.update({"skip": skip, "first": first})
        _gql_users = gql_users(fragment_builder(fields, User))
        result = self.auth.client.execute(_gql_users, payload)
        return format_result("data", result)

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

        Args:
            organization_id: Identifier of the user's organization

        Returns:
            The number of organizations with the parameters provided
        """
        variables = {
            "where": {
                "organization": {
                    "id": organization_id,
                }
            }
        }
        result = self.auth.client.execute(GQL_USERS_COUNT, variables)
        return format_result("data", result, int)

count_users(self, organization_id=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

Returns:

Type Description
int

The number of organizations with the parameters provided

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

    Args:
        organization_id: Identifier of the user's organization

    Returns:
        The number of organizations with the parameters provided
    """
    variables = {
        "where": {
            "organization": {
                "id": organization_id,
            }
        }
    }
    result = self.auth.client.execute(GQL_USERS_COUNT, variables)
    return format_result("data", result, int)

users(self, api_key=None, email=None, organization_id=None, fields=['email', 'id', 'firstname', 'lastname'], first=None, skip=0, disable_tqdm=False, 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 List[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 bool

If True, the progress bar will be disabled

False
as_generator bool

If True, a generator on the users is returned.

False

Returns:

Type Description
Union[List[dict], Generator[dict, NoneType]]

A result object which contains the query if it was successful, or an error message.

Examples:

# List all users in my organization
>>> organization = kili.organizations()
>>> organization_id = organizations[0]['id]
>>> kili.users(organization_id=organization_id)
Source code in kili/queries/user/__init__.py
@typechecked
def users(
    self,
    api_key: Optional[str] = None,
    email: Optional[str] = None,
    organization_id: Optional[str] = None,
    fields: List[str] = ["email", "id", "firstname", "lastname"],
    first: Optional[int] = None,
    skip: int = 0,
    disable_tqdm: bool = False,
    as_generator: bool = False,
) -> Union[List[dict], Generator[dict, None, None]]:
    # 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:
        A result object which contains the query if it was successful,
            or an error message.

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

    count_args = {"organization_id": organization_id}
    disable_tqdm = disable_tqdm or as_generator or (api_key or email) is not None
    payload_query = {
        "where": {
            "apiKey": api_key,
            "email": email,
            "organization": {
                "id": organization_id,
            },
        }
    }

    users_generator = row_generator_from_paginated_calls(
        skip,
        first,
        self.count_users,
        count_args,
        self._query_users,
        payload_query,
        fields,
        disable_tqdm,
    )

    if as_generator:
        return users_generator
    return list(users_generator)

Mutations

Set of User mutations.

Source code in kili/mutations/user/__init__.py
class MutationsUser:
    """Set of User mutations."""

    # pylint: disable=too-many-arguments,too-many-locals

    def __init__(self, auth):
        """Initialize the subclass.

        Args:
            auth: KiliAuth object
        """
        self.auth = auth

    @typechecked
    def create_user(
        self,
        email: str,
        password: str,
        organization_role: str,
        firstname: Optional[str] = None,
        lastname: Optional[str] = None,
    ):
        """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 result object which indicates if the mutation was successful,
                or an error message.
        """
        variables = {
            "data": {
                "email": email,
                "password": password,
                "organizationRole": organization_role,
            }
        }
        if firstname is not None:
            variables["data"]["firstname"] = firstname
        if lastname is not None:
            variables["data"]["lastname"] = lastname
        result = self.auth.client.execute(GQL_CREATE_USER, variables)
        return format_result("data", result)

    @typechecked
    def update_password(
        self, email: str, old_password: str, new_password_1: str, new_password_2: 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 result object which indicates if the mutation was successful,
                or an error message.
        """
        variables = {
            "data": {
                "oldPassword": old_password,
                "newPassword1": new_password_1,
                "newPassword2": new_password_2,
            },
            "where": {"email": email},
        }
        result = self.auth.client.execute(GQL_UPDATE_PASSWORD, variables)
        return format_result("data", result)

    @typechecked
    def reset_password(self, email: str):
        """Reset password.

        This resolver only works for on-premise installations without Auth0,
        if your organization allows Kili to send emails.

        Args:
            email: Email of the person whose password has to be reset.

        Returns:
            A result object which indicates if the mutation was successful,
                or an error message.
        """
        variables = {"where": {"email": email}}
        result = self.auth.client.execute(GQL_RESET_PASSWORD, variables)
        return format_result("data", result)

    @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[str] = None,
        activated: Optional[bool] = None,
    ):
        """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 result object which indicates if the mutation was successful,
                or an error message.
        """
        variables: Dict[str, Any] = {
            "email": email,
        }
        if firstname is not None:
            variables["firstname"] = firstname
        if lastname is not None:
            variables["lastname"] = lastname
        if organization_id is not None:
            variables["organizationId"] = organization_id
        if organization_role is not None:
            variables["organizationRole"] = organization_role
        if activated is not None:
            variables["activated"] = activated
        result = self.auth.client.execute(GQL_UPDATE_PROPERTIES_IN_USER, variables)
        return format_result("data", result)

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 str

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

A result object which indicates if the mutation was successful, or an error message.

Source code in kili/mutations/user/__init__.py
@typechecked
def create_user(
    self,
    email: str,
    password: str,
    organization_role: str,
    firstname: Optional[str] = None,
    lastname: Optional[str] = None,
):
    """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 result object which indicates if the mutation was successful,
            or an error message.
    """
    variables = {
        "data": {
            "email": email,
            "password": password,
            "organizationRole": organization_role,
        }
    }
    if firstname is not None:
        variables["data"]["firstname"] = firstname
    if lastname is not None:
        variables["data"]["lastname"] = lastname
    result = self.auth.client.execute(GQL_CREATE_USER, variables)
    return format_result("data", result)

reset_password(self, email)

Reset password.

This resolver only works for on-premise installations without Auth0, if your organization allows Kili to send emails.

Parameters:

Name Type Description Default
email str

Email of the person whose password has to be reset.

required

Returns:

Type Description

A result object which indicates if the mutation was successful, or an error message.

Source code in kili/mutations/user/__init__.py
@typechecked
def reset_password(self, email: str):
    """Reset password.

    This resolver only works for on-premise installations without Auth0,
    if your organization allows Kili to send emails.

    Args:
        email: Email of the person whose password has to be reset.

    Returns:
        A result object which indicates if the mutation was successful,
            or an error message.
    """
    variables = {"where": {"email": email}}
    result = self.auth.client.execute(GQL_RESET_PASSWORD, variables)
    return format_result("data", result)

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

Email of the person whose password has to be updated.

required
old_password

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

A result object which indicates if the mutation was successful, or an error message.

Source code in kili/mutations/user/__init__.py
@typechecked
def update_password(
    self, email: str, old_password: str, new_password_1: str, new_password_2: 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 result object which indicates if the mutation was successful,
            or an error message.
    """
    variables = {
        "data": {
            "oldPassword": old_password,
            "newPassword1": new_password_1,
            "newPassword2": new_password_2,
        },
        "where": {"email": email},
    }
    result = self.auth.client.execute(GQL_UPDATE_PASSWORD, variables)
    return format_result("data", result)

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[str]

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

A result object which indicates if the mutation was successful, or an error message.

Source code in kili/mutations/user/__init__.py
@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[str] = None,
    activated: Optional[bool] = None,
):
    """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 result object which indicates if the mutation was successful,
            or an error message.
    """
    variables: Dict[str, Any] = {
        "email": email,
    }
    if firstname is not None:
        variables["firstname"] = firstname
    if lastname is not None:
        variables["lastname"] = lastname
    if organization_id is not None:
        variables["organizationId"] = organization_id
    if organization_role is not None:
        variables["organizationRole"] = organization_role
    if activated is not None:
        variables["activated"] = activated
    result = self.auth.client.execute(GQL_UPDATE_PROPERTIES_IN_USER, variables)
    return format_result("data", result)