def get_group(group_name, parent=None):
    if get_sheetid(group_name) == -1:
        return None
    values = get_values(group_name)
    SID_index = values[0].index('SID')
    role_index = values[0].index('Role')
    subgroup_index = values[0].index("Subgroups")
    parent_index = values[0].index("Parent")
    persons = {}
    subgroups = set()
    for row in range(1, len(values)):
        sid = values[row][SID_index]
        role = values[row][role_index]
        subgroup = ""
        if len(values[row]) > 2:
            subgroup = str(values[row][subgroup_index])
        if subgroup:
            subgroups.add(subgroup)
        if sid:
            persons[sid] = role
    if group_name == ROOT_GROUP:
        group = Group(group_name, persons, subgroups, True, None,
                      drive.get_group_id(group_name))
    else:
        parent_name = values[1][parent_index]
        if parent and isinstance(parent, Group):
            group = Group(group_name, persons, subgroups, True, parent,
                          drive.get_group_id(group_name, parent.drive_id))
        else:
            par = get_group(parent_name)
            group = Group(group_name, persons, subgroups, True, par,
                          drive.get_group_id(group_name, par.drive_id))
    return group
def create_group(group_name, parent_name='ulab'):
    parent = get_group(parent_name)
    name = parent_name + '-' + group_name
    new_group = get_group(name)
    if new_group:
        print("A group with this name already exists.")
        return False
    if not parent:
        print(
            "Please specify a valid parent for this new group. To create astro under the physics group, call create_group('astro', 'ulab-physics')."
        )
        return False
    if parent.hasPeople():
        print(
            "{} is a leaf group and has people. Please remove these people and then create subgroups for {}"
            .format(parent_name, parent_name))
        return False
    if not parent.drive_id:
        print(
            "{} does not have a valid corresponding drive folder. Please check with an admin."
        )
        return False

    # Need to get the group's id after successfully creating the corresponding drive folder.
    drive.create_new_directory(name, parent.drive_id)
    group_id = drive.get_group_id(name, parent.drive_id)
    drive.create_new_directory('Content', group_id)

    new_group = Group(name=name, parent=parent, drive_id=group_id)
    new_group.save_group()
    # Parent got a new subgroup, so we need to save this as well.
    parent.save_group()
    return True
コード例 #3
0
def add_person_to_mainroster(fields):
    # Checks to make sure we have the required fields.
    person_fields = fields.copy()
    if not check_fields(person_fields):
        print("Fields are not inputted properly. Make sure to input fields as a dictionary of values with keys like Person.SID. Required fields are SID, first name, last name, and email.")
        return False

    # get_person takes in an integer SID.
    new_person = get_person(int(person_fields[Person.SID]))
    if new_person:
        print("This person already exists in the main roster.")
        return False
    new_person = Person(person_fields)
    new_person.save_person()

    drive.add_permissions(new_person.get_email(), 'Content', drive.get_group_id(ROOT_GROUP))

    return True