def get_or_create(group_name=None, display_name=None, place=None, level=None, user=None, group_type='interest', description='', permission_prototype='public') : """get or create a group """ # note : we can't use get_or_create for TgGroup, because the created date clause won't match on a different day # from the day the record was created. if not user: raise TypeError("We must have a user to create a group, since otherwise it will be inaccessible") if not place: place = get_or_create_root_location() xs = TgGroup.objects.filter(group_name=group_name) if len(xs) > 0 : group = xs[0] created = False else : created = True group = TgGroup(group_name=group_name, display_name=display_name, level=level, place=place, description=description, group_type=group_type) group.save() if level == 'member': admin_group, created = TgGroup.objects.get_or_create( group_name=group_name + "_hosts", display_name=display_name + " Hosts", level='host', place=place, user=user, description="Admin Group for %s" % display_name, ) setup_group_security(group, group, admin_group, user, permission_prototype) elif level == 'host': setup_group_security(group, group, group, user, 'private') if group.group_name != "all_members_hosts" : group.add_member(get_all_members_group().get_admin_group()) return group, created