64 lines
1.9 KiB
Python
64 lines
1.9 KiB
Python
from optparse import make_option
|
|
|
|
from django.core.management.base import BaseCommand, CommandError
|
|
from django.contrib.auth.models import User, Group
|
|
|
|
|
|
class Command(BaseCommand):
|
|
option_list = BaseCommand.option_list + (
|
|
make_option('--list',
|
|
action='store_true',
|
|
dest='list',
|
|
default=False,
|
|
help='List available groups'),
|
|
make_option('--create',
|
|
action='store_true',
|
|
dest='create',
|
|
default=False,
|
|
help='Create the group if it does not exist'),
|
|
make_option('--remove',
|
|
action='store_true',
|
|
dest='remove',
|
|
default=False,
|
|
help='Remove the user from the group instead of adding it'),
|
|
)
|
|
|
|
args = '<user|email> <group>'
|
|
help = 'Add a user to a group'
|
|
|
|
def print_groups(self):
|
|
print 'Groups available:'
|
|
for group in Group.objects.all().distinct():
|
|
print ' ', group.name
|
|
|
|
def handle(self, *args, **options):
|
|
if options['list']:
|
|
self.print_groups()
|
|
return
|
|
|
|
if len(args) != 2:
|
|
raise CommandError('Usage is add_to_group {0}'.format(self.args))
|
|
|
|
name_or_email, group_name = args
|
|
|
|
if '@' in name_or_email:
|
|
user = User.objects.get(email=name_or_email)
|
|
else:
|
|
user = User.objects.get(username=name_or_email)
|
|
|
|
try:
|
|
group = Group.objects.get(name=group_name)
|
|
except Group.DoesNotExist:
|
|
if options['create']:
|
|
group = Group(name=group_name)
|
|
group.save()
|
|
else:
|
|
raise CommandError('Group {} does not exist'.format(group_name))
|
|
|
|
if options['remove']:
|
|
user.groups.remove(group)
|
|
else:
|
|
user.groups.add(group)
|
|
|
|
print 'Success!'
|