added some manage.py extensions
This commit is contained in:
parent
e5edd2a7f4
commit
390e58b24d
|
@ -64,6 +64,9 @@ EXCLUDE_DIRECTORIES = [
|
||||||
|
|
||||||
# Docker files
|
# Docker files
|
||||||
os.path.join(OTTERTUNE_DIR, 'docker'),
|
os.path.join(OTTERTUNE_DIR, 'docker'),
|
||||||
|
|
||||||
|
# Django manage.py extensions
|
||||||
|
os.path.join(OTTERTUNE_DIR, "server/website/website/management"),
|
||||||
]
|
]
|
||||||
|
|
||||||
# Files that should NOT be checked
|
# Files that should NOT be checked
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
#
|
||||||
|
# OtterTune - createuser.py
|
||||||
|
#
|
||||||
|
# Copyright (c) 2017-18, Carnegie Mellon University Database Group
|
||||||
|
#
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = 'Create a new user.'
|
||||||
|
|
||||||
|
def add_arguments(self, parser):
|
||||||
|
parser.add_argument(
|
||||||
|
'username',
|
||||||
|
metavar='USERNAME',
|
||||||
|
help='Specifies the login for the user.')
|
||||||
|
parser.add_argument(
|
||||||
|
'password',
|
||||||
|
metavar='PASSWORD',
|
||||||
|
help='Specifies the password for the user.')
|
||||||
|
parser.add_argument(
|
||||||
|
'--email',
|
||||||
|
metavar='EMAIL',
|
||||||
|
default=None,
|
||||||
|
help='Specifies the email for the user.')
|
||||||
|
parser.add_argument(
|
||||||
|
'--superuser',
|
||||||
|
action='store_true',
|
||||||
|
help='Creates a superuser.')
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
username = options['username']
|
||||||
|
if User.objects.filter(username=username).exists():
|
||||||
|
self.stdout.write(self.style.NOTICE(
|
||||||
|
"ERROR: User '{}' already exists.".format(username)))
|
||||||
|
else:
|
||||||
|
password = options['password']
|
||||||
|
email = options['email']
|
||||||
|
superuser = options['superuser']
|
||||||
|
|
||||||
|
if superuser:
|
||||||
|
email = email or '{}@noemail.com'.format(username)
|
||||||
|
create_user = User.objects.create_superuser
|
||||||
|
else:
|
||||||
|
create_user = User.objects.create_user
|
||||||
|
|
||||||
|
create_user(username=username, password=password, email=email)
|
||||||
|
|
||||||
|
self.stdout.write(self.style.SUCCESS("Successfully created {} '{}'{}.".format(
|
||||||
|
'superuser' if superuser else 'user', username,
|
||||||
|
" ('{}')".format(email) if email else '')))
|
|
@ -0,0 +1,29 @@
|
||||||
|
#
|
||||||
|
# OtterTune - deleteuser.py
|
||||||
|
#
|
||||||
|
# Copyright (c) 2017-18, Carnegie Mellon University Database Group
|
||||||
|
#
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = 'Delete an existing user.'
|
||||||
|
|
||||||
|
def add_arguments(self, parser):
|
||||||
|
parser.add_argument(
|
||||||
|
'username',
|
||||||
|
metavar='USERNAME',
|
||||||
|
# required=True,
|
||||||
|
help='Specifies the login of the user to delete.')
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
username = options['username']
|
||||||
|
try:
|
||||||
|
user = User.objects.get(username=username)
|
||||||
|
user.delete()
|
||||||
|
self.stdout.write(self.style.SUCCESS(
|
||||||
|
"Successfully deleted user '{}'.".format(username)))
|
||||||
|
except User.DoesNotExist:
|
||||||
|
self.stdout.write(self.style.NOTICE(
|
||||||
|
"ERROR: User '{}' does not exist.".format(username)))
|
|
@ -0,0 +1,40 @@
|
||||||
|
#
|
||||||
|
# OtterTune - getuploadcode.py
|
||||||
|
#
|
||||||
|
# Copyright (c) 2017-18, Carnegie Mellon University Database Group
|
||||||
|
#
|
||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
|
||||||
|
from website.models import Session
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = 'Get the upload code for a session.'
|
||||||
|
|
||||||
|
def add_arguments(self, parser):
|
||||||
|
parser.add_argument(
|
||||||
|
'username',
|
||||||
|
metavar='USERNAME',
|
||||||
|
help='Specifies the username of the session owner.')
|
||||||
|
parser.add_argument(
|
||||||
|
'projectname',
|
||||||
|
metavar='PROJECTNAME',
|
||||||
|
help='Specifies the name of the project that the session belongs to.')
|
||||||
|
parser.add_argument(
|
||||||
|
'sessionname',
|
||||||
|
metavar='SESSIONNAME',
|
||||||
|
help='Specifies the name of the session.')
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
username = options['username']
|
||||||
|
projectname = options['projectname']
|
||||||
|
sessionname = options['sessionname']
|
||||||
|
session = Session.objects.filter(user__username=username,
|
||||||
|
project__name=projectname,
|
||||||
|
name=sessionname).first()
|
||||||
|
if session:
|
||||||
|
self.stdout.write(self.style.NOTICE(session.upload_code))
|
||||||
|
else:
|
||||||
|
self.stdout.write(self.style.NOTICE(
|
||||||
|
"ERROR: Session '{}' for user '{}' under project '{}' does not exist.".format(
|
||||||
|
sessionname, username, projectname)))
|
|
@ -0,0 +1,46 @@
|
||||||
|
#
|
||||||
|
# OtterTune - listusers.py
|
||||||
|
#
|
||||||
|
# Copyright (c) 2017-18, Carnegie Mellon University Database Group
|
||||||
|
#
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = 'List all users.'
|
||||||
|
default_fields = ('username', 'email', 'is_superuser')
|
||||||
|
item_fmt = '{{{i}: <{w}}}'.format
|
||||||
|
col_space = 3
|
||||||
|
|
||||||
|
def add_arguments(self, parser):
|
||||||
|
parser.add_argument(
|
||||||
|
'fields',
|
||||||
|
nargs='*',
|
||||||
|
default='DEFAULT',
|
||||||
|
choices=[f.name for f in User._meta.get_fields()] + ['DEFAULT'],
|
||||||
|
metavar='FIELDS',
|
||||||
|
help='Fields from the User model to display. (default: {})'.format(
|
||||||
|
list(self.default_fields)))
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
fields = options['fields']
|
||||||
|
if fields == 'DEFAULT':
|
||||||
|
fields = self.default_fields
|
||||||
|
|
||||||
|
users = User.objects.values_list(*fields)
|
||||||
|
self.stdout.write(self.style.NOTICE(
|
||||||
|
'\nFound {} existing users.\n'.format(len(users))))
|
||||||
|
if users:
|
||||||
|
fmt = ''
|
||||||
|
for i, field in enumerate(fields):
|
||||||
|
w = max(len(field), max(len(str(u[i])) for u in users)) + self.col_space
|
||||||
|
fmt += self.item_fmt(i=i, w=w)
|
||||||
|
fmt = (fmt + '\n').format
|
||||||
|
h = fmt(*fields)
|
||||||
|
out = h + ('-' * (len(h) + 1)) + '\n'
|
||||||
|
for user_info in users:
|
||||||
|
out += fmt(*(str(ui) for ui in user_info))
|
||||||
|
out += '\n'
|
||||||
|
|
||||||
|
self.stdout.write(out)
|
|
@ -0,0 +1,49 @@
|
||||||
|
#
|
||||||
|
# OtterTune - setuploadcode.py
|
||||||
|
#
|
||||||
|
# Copyright (c) 2017-18, Carnegie Mellon University Database Group
|
||||||
|
#
|
||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
|
||||||
|
from website.models import Session
|
||||||
|
from website.utils import MediaUtil
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = 'Set the upload code for a session.'
|
||||||
|
|
||||||
|
def add_arguments(self, parser):
|
||||||
|
parser.add_argument(
|
||||||
|
'username',
|
||||||
|
metavar='USERNAME',
|
||||||
|
help='Specifies the username of the session owner.')
|
||||||
|
parser.add_argument(
|
||||||
|
'projectname',
|
||||||
|
metavar='PROJECTNAME',
|
||||||
|
help='Specifies the name of the project that the session belongs to.')
|
||||||
|
parser.add_argument(
|
||||||
|
'sessionname',
|
||||||
|
metavar='SESSIONNAME',
|
||||||
|
help='Specifies the name of the session.')
|
||||||
|
parser.add_argument(
|
||||||
|
'--upload-code',
|
||||||
|
metavar='UPLOADCODE',
|
||||||
|
default=None,
|
||||||
|
help='Specifies the value to set the upload code to.')
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
username = options['username']
|
||||||
|
projectname = options['projectname']
|
||||||
|
sessionname = options['sessionname']
|
||||||
|
session = Session.objects.filter(user__username=username,
|
||||||
|
project__name=projectname,
|
||||||
|
name=sessionname).first()
|
||||||
|
if session:
|
||||||
|
upload_code = options['upload_code'] or MediaUtil.upload_code_generator()
|
||||||
|
session.upload_code = upload_code
|
||||||
|
session.save()
|
||||||
|
self.stdout.write(self.style.NOTICE(upload_code))
|
||||||
|
else:
|
||||||
|
self.stdout.write(self.style.NOTICE(
|
||||||
|
"ERROR: Session '{}' for user '{}' under project '{}' does not exist.".format(
|
||||||
|
sessionname, username, projectname)))
|
Loading…
Reference in New Issue