Ejemplo n.º 1
0
def test_crud_user(looker_client: mtds.LookerSDK):
    """Test creating, retrieving, updating and deleting a user.
    """

    # Create user
    user = looker_client.create_user(
        ml.WriteUser(first_name="John", last_name="Doe", is_disabled=False, locale="fr")
    )
    assert isinstance(user, ml.User)
    assert isinstance(user.id, int)
    assert user.first_name == "John"
    assert user.last_name == "Doe"
    assert not user.is_disabled
    assert user.locale == "fr"

    # sudo checks
    user_id = user.id
    looker_client.login_user(user_id)
    user = looker_client.me()
    assert user.first_name == "John"
    assert user.last_name == "Doe"
    looker_client.logout()
    user = looker_client.me()
    assert user.first_name != "John"
    assert user.last_name != "Doe"

    # Update user and check fields we didn't intend to change didn't change
    update_user = ml.WriteUser(is_disabled=True, locale="uk")
    looker_client.update_user(user_id, update_user)
    user = looker_client.user(user_id)
    assert user.first_name == "John"
    assert user.last_name == "Doe"
    assert user.locale == "uk"
    assert user.is_disabled

    # Update user and check fields we intended to wipe out are now None
    # first way to specify nulling out a field
    update_user = ml.WriteUser(first_name=ml.EXPLICIT_NULL)
    # second way
    update_user.last_name = ml.EXPLICIT_NULL
    looker_client.update_user(user_id, update_user)
    user = looker_client.user(user_id)
    assert user.first_name is None
    assert user.last_name is None

    # Try adding email creds
    looker_client.create_user_credentials_email(
        user_id, ml.WriteCredentialsEmail(email="*****@*****.**")
    )
    user = looker_client.user(user_id)
    assert isinstance(user.credentials_email, ml.CredentialsEmail)
    assert user.credentials_email.email == "*****@*****.**"

    # Delete user
    resp = looker_client.delete_user(user_id)
    assert resp == ""

    looker_client.logout()
Ejemplo n.º 2
0
def test_search_users_matches_pattern(sdk: mtds.LookerSDK,
                                      users: List[Dict[str, str]],
                                      email_domain: str):
    """search_users should return a list of all matches.
    """
    user = users[0]

    # Search by full email
    search_email = f'{user["first_name"]}.{user["last_name"]}{email_domain}'
    search_results = sdk.search_users_names(pattern=search_email)
    assert len(search_results) == 1
    assert search_results[0].first_name == user["first_name"]
    assert search_results[0].last_name == user["last_name"]
    assert search_results[0].email == search_email

    # Search by first name
    search_results = sdk.search_users_names(pattern=user["first_name"])
    assert len(search_results) > 0
    assert search_results[0].first_name == user["first_name"]

    # First name with spaces
    u = sdk.create_user(
        ml.WriteUser(first_name="John Allen", last_name="Smith"))
    if u.id:
        search_results = sdk.search_users_names(pattern="John Allen")
        assert len(search_results) == 1
        assert search_results[0].first_name == "John Allen"
        assert search_results[0].last_name == "Smith"

        # Delete user
        resp = sdk.delete_user(u.id)
        assert resp == ""
Ejemplo n.º 3
0
def find_or_create_user(*, sdk: methods.LookerSDK, first_name: str,
                        last_name: str, email: str) -> models.User:
    try:
        users = sdk.search_users(email=email)
        if users:
            user = users[0]
            if (user.first_name != first_name or user.last_name != last_name
                    or user.is_disabled):
                assert user.id
                user = sdk.update_user(
                    user_id=user.id,
                    body=models.WriteUser(first_name=first_name,
                                          last_name=last_name,
                                          is_disabled=False),
                )
        else:
            user = sdk.create_user(
                models.WriteUser(first_name=first_name, last_name=last_name))
    except error.SDKError as create_ex:
        raise RegisterError(f"Failed to find or create User ({create_ex})")
    return user
Ejemplo n.º 4
0
def create_test_users(sdk: mtds.LookerSDK, users: List[Dict[str, str]],
                      email_domain: str):
    user_ids: List[int] = []

    for u in users:
        user = sdk.create_user(
            ml.WriteUser(first_name=u["first_name"], last_name=u["last_name"]))

        if user.id:
            user_ids.append(user.id)
            email = f"{u['first_name']}.{u['last_name']}{email_domain}"
            sdk.create_user_credentials_email(
                user.id, ml.WriteCredentialsEmail(email=email))

    yield

    for user_id in user_ids:
        sdk.delete_user(user_id)
Ejemplo n.º 5
0
def enable_users_by_hackathons(hackathons: Sequence[str]) -> Dict[str, str]:
    global LOOKER_GROUP_PREFIX
    sdk = looker_sdk.init31()
    groups = {g.name: g.id for g in sdk.all_groups(fields="id,name")}
    ret = {}
    for hackathon in hackathons:
        try:
            group_id = groups[f"{LOOKER_GROUP_PREFIX}{hackathon}"]
        except KeyError:
            raise RegisterError(f"No group found for hackathon: '{hackathon}'")
        for user in sdk.search_users(group_id=group_id):
            assert user.id
            assert user.email
            sdk.update_user(user_id=user.id,
                            body=models.WriteUser(is_disabled=False))
            password_reset_url = sdk.create_user_credentials_email_password_reset(
                user_id=user.id, expires=False).password_reset_url
            assert password_reset_url
            setup = re.sub("password/reset", "account/setup",
                           password_reset_url)
            ret[user.email] = setup
    return ret
Ejemplo n.º 6
0
def disable_user(*, sdk: methods.LookerSDK, user_id: int):
    sdk.update_user(user_id=user_id, body=models.WriteUser(is_disabled=True))
Ejemplo n.º 7
0
def disable_user(user_id: int):
    user = models.WriteUser(is_disabled=True)
    sdk.update_user(user_id, body=user)
Ejemplo n.º 8
0
# Open the list of users from the csv file
from numpy import genfromtxt
import pandas as pd
from looker_sdk import client, models, error

file = genfromtxt("user_to_disable_ids.csv")

# Create a list of user_ids
user_ids = []
for row in file:
    user_ids.append(int(row))
print(user_ids)

# client calls will now automatically authenticate using the
# api3credentials specified in 'looker.ini'
sdk = client.setup("looker.ini")
looker_api_user = sdk.me()

# Updating the user: change first_name and explicitly nullify
update_user = models.WriteUser(is_disabled=True)  # do not use None

# update the user with the client

count = 0
for user in user_ids:
    count += 1
    updated_user = sdk.update_user(user_id=user, body=update_user)
    print(
        count, f"Disabled user:({user}) {updated_user.display_name} "
        f"locale:({updated_user.locale})", f"email:({updated_user.email})")