User and Usergroup

# manage users and user groups
import csv
from mstrio.users_and_groups import (
    create_users_from_csv, list_user_groups, list_users, User, UserGroup
)
from mstrio.connection import get_connection

PROJECT_NAME = '<project_name>'  # Project to connect to

# Usernames and full names for users to create
USERNAME_1 = '<username_1>'
FULLNAME_1 = '<full_name_1>'
USERNAME_2 = '<username_2>'
FULLNAME_2 = '<full_name_2>'
USERNAME_3 = '<username_3>'
FULLNAME_3 = '<full_name_3>'
USERNAME_4 = '<username_4>'
FULLNAME_4 = '<full_name_4>'
USERNAME_5 = '<username_5>'
FULLNAME_5 = '<full_name_5>'
USERNAME_6 = '<username_6>'
FULLNAME_6 = '<full_name_6>'

NAME_BEGINS = '<name_begins>'  # beginning of the full name to look for in listing users
INITIALS = '<name_initials>'  # initials to look for in listing users
USERGROUP_NAME = '<usergroup_name>'  # name of a User Group to create and add users
CSV_FILE = '<path_to_csv_file>'  # csv file to create user from
OBJECT_ID = '<object_id>'  # ID of an object to which permissions will be set
OBJECT_TYPE = '<object_type>'  # type of an object to which permissions will be set;
# see ObjectTypes enum in types.py for available object type values
PERMISSION = '<permission_type>'  # type of permission to set;
# see Permissions enum in /utils/acl.py for available permission values

conn = get_connection(workstationData, project_name=PROJECT_NAME)

# create multiple users
users_array = [
    {
        'username': USERNAME_1, 'fullName': FULLNAME_1
    }, {
        'username': USERNAME_2, 'fullName': FULLNAME_2
    }, {
        'username': USERNAME_3, 'fullName': FULLNAME_3
    }, {
        'username': USERNAME_4, 'fullName': FULLNAME_4
    }, {
        'username': USERNAME_5, 'fullName': FULLNAME_5
    }
]
for u in users_array:
    User.create(connection=conn, username=u['username'], full_name=u['fullName'])

# Also, you can create users from a CSV file
newly_created_users = create_users_from_csv(connection=conn, csv_file=CSV_FILE)

# Or you can do it manually
with open(CSV_FILE, "r") as f:
    users = csv.DictReader(f)

    for user in users:
        User.create(connection=conn, username=user['username'], full_name=user['full_name'])

# create a single user and get users which name begins with "John" and have
# additional filter for initials
User.create(connection=conn, username=USERNAME_6, full_name=FULLNAME_6)
my_users = list_users(connection=conn, name_begins=NAME_BEGINS, initials=INITIALS)

# get all user groups (you can also add additional filters as for users) and
# create a new one
user_groups_list = list_user_groups(connection=conn)
UserGroup.create(connection=conn, name=USERGROUP_NAME)

# get user, user group and add this user to this user group
user_ = User(connection=conn, name=FULLNAME_6)
user_group_ = UserGroup(connection=conn, name=USERGROUP_NAME)
user_group_.add_users(users=[user_.id])

# set custom permissions of the user for given objects
user_.set_custom_permissions(
    to_objects=[OBJECT_ID],
    object_type=OBJECT_TYPE,
    execute=
    '<permission>',  # Available values for permissions are 'grant', 'deny', 'default' or None
    use='<permission>',
    control='<permission>',
    delete='<permission>',
    write='<permission>',
    read='<permission>',
    browse='<permission>'
)

# set permission of the user group for given objects
user_group_.set_permission(permission=PERMISSION, to_objects=[OBJECT_ID], object_type=OBJECT_TYPE)

# delete a user and a user group
user_.delete()
user_group_.delete()

# Addresses
user_john = User(connection=conn, name=FULLNAME_6)
johns_addresses = user_john.addresses
johns_default_addresses = [addr for addr in johns_addresses if addr["is_default"]]
johns_default_address = johns_default_addresses[0]
johns_default_address = next((addr for addr in user_john.addresses if addr["is_default"]), None)