def import_user_dicts(users=None, _user=None, session=None): ''' Import a list of dicts containing user info Args: users (list): user dictionaries _user (int): User id of admin making inventory changes Returns: dict: a dictionary that contains information about the function run :: data = {'status': either 'finished' or 'failed', 'message': message to be returned to the UI, 'log': message to be added to ShakeCast log and should contain info on error} ''' if isinstance(_user, int): _user = session.query(User).filter(User.shakecast_id == _user).first() if users is not None: for user in users: username = user.get('USERNAME', user.get('username', '')) # input validation if not username: continue # get existing user u = session.query(User).filter(User.username == username).all() if u: u = u[0] else: u = User() u.username = username u.group_string = user.get('GROUP', user.get('group_string', '')) u.user_type = user.get('USER_TYPE', user.get('user_type', '')) u.full_name = user.get('FULL_NAME', user.get('full_name', '')) u.phone_number = user.get('PHONE_NUMBER', user.get('phone_number', '')) delivery = user.get('DELIVERY', user.get('delivery', False)) if delivery: u.mms = delivery.get('MMS', delivery.get('mms', delivery.get('PAGER', delivery.get('pager', '')))) u.updated = time.time() if _user is not None: if u.updated_by is None: u.updated_by = _user.username elif _user.username not in u.updated_by: updated_lst = u.updated_by.split(',') updated_lst += [_user.username] u.updated_by = ','.join(updated_lst) # set the user's password and email if they haven't changed it # themselves if (u.updated_by is None or _user is None or u.username not in u.updated_by or _user.username == u.username): u.email = user.get('EMAIL_ADDRESS', user.get('email', '')) password = user.get('PASSWORD', user.get('password', None)) if password is not None: u.password = generate_password_hash(password, method='pbkdf2:sha512') session.add(u) session.commit() add_users_to_groups(session=session) session.commit() log_message = '' status = 'finished' data = {'status': status, 'message': {'from': 'import_user_dicts', 'title': 'User Upload', 'message': 'User update complete', 'success': True}, 'log': log_message} return data
def import_user_dicts(users=None, _user=None, session=None): ''' Import a list of dicts containing user info Args: users (list): user dictionaries _user (int): User id of admin making inventory changes Returns: dict: a dictionary that contains information about the function run :: data = {'status': either 'finished' or 'failed', 'message': message to be returned to the UI, 'log': message to be added to ShakeCast log and should contain info on error} ''' if isinstance(_user, int): _user = session.query(User).filter(User.shakecast_id == _user).first() if users is not None: for user in users: username = user.get('USERNAME', user.get('username', '')) # input validation if not username: continue # get existing user u = session.query(User).filter(User.username == username).all() if u: u = u[0] else: u = User() u.username = username u.group_string = user.get('GROUP', user.get('group_string', '')) u.user_type = user.get('USER_TYPE', user.get('user_type', '')) u.full_name = user.get('FULL_NAME', user.get('full_name', '')) u.phone_number = user.get('PHONE_NUMBER', user.get('phone_number', '')) delivery = user.get('DELIVERY', user.get('delivery', False)) if delivery: u.mms = delivery.get( 'MMS', delivery.get( 'mms', delivery.get('PAGER', delivery.get('pager', '')))) u.updated = time.time() if _user is not None: if u.updated_by is None: u.updated_by = _user.username elif _user.username not in u.updated_by: updated_lst = u.updated_by.split(',') updated_lst += [_user.username] u.updated_by = ','.join(updated_lst) # set the user's password and email if they haven't changed it # themselves if (u.updated_by is None or _user is None or u.username not in u.updated_by or _user.username == u.username): u.email = user.get('EMAIL_ADDRESS', user.get('email', '')) password = user.get('PASSWORD', user.get('password', None)) if password is not None: u.password = generate_password_hash(password, method='pbkdf2:sha512') session.add(u) session.commit() add_users_to_groups(session=session) session.commit() log_message = '' status = 'finished' data = { 'status': status, 'message': { 'from': 'import_user_dicts', 'title': 'User Upload', 'message': 'User update complete', 'success': True }, 'log': log_message } return data