~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to bin/ivle-adduser

  • Committer: Matt Giuca
  • Date: 2009-12-01 04:27:58 UTC
  • mfrom: (1164.2.46 sphinx-docs)
  • Revision ID: matt.giuca@gmail.com-20091201042758-wuxd9bdec00c283i
Merged sphinx-docs branch. This adds Sphinx documentation for the entire IVLE system (for system administrators and developers), and removes all of our random old document files (all either irrelevant, or moved into the Sphinx docs nicely). Currently incomplete, but ready to merge.

Show diffs side-by-side

added added

removed removed

Lines of Context:
29
29
 
30
30
import sys
31
31
import os
32
 
import getopt
 
32
import optparse
33
33
 
34
34
if os.getuid() != 0:
35
35
    print "Must run %s as root." % os.path.basename(sys.argv[0])
39
39
from ivle.database import get_store, User
40
40
from ivle.pulldown_subj import enrol_user
41
41
 
42
 
# Requireds and optionals will be used to display the usage message
43
 
# AND do argument processing
44
 
# The names here must correspond to the fields in the database.
45
 
requireds = ["login", "fullname"]
46
 
optionals = [
47
 
    ('p', 'password', "Cleartext password for this user"),
48
 
    ('n', 'nick', "Display name (defaults to <fullname>)"),
49
 
    ('e', 'email', "Email address"),
50
 
    ('s', 'studentid', "Student ID")
51
 
]
52
 
 
53
 
if len(sys.argv) <= 3:
54
 
    # Nicely format the usage message using the optionals
55
 
    print ("Usage: %s [OPTIONS] %s\n    OPTIONS"
56
 
        % (os.path.basename(sys.argv[0]),
57
 
           ' '.join(['<%s>' % x for x in requireds])))
58
 
    for short, long, desc in optionals:
59
 
        t = "        -%s | --%s" % (short, long)
60
 
        print t + (' ' * max(28 - len(t), 2)) + desc
61
 
    sys.exit(1)
62
 
 
63
 
shorts = ''.join([o[0] + ":" for o in optionals])
64
 
longs = [o[1] + "=" for o in optionals]
65
 
opts, args = getopt.gnu_getopt(sys.argv[1:], shorts, longs)
66
 
opts = dict(opts)
67
 
 
68
 
# Get the dictionary of fields from opts and args
69
 
user = {}
70
 
for i in range(0, len(requireds)):
71
 
    user[requireds[i]] = unicode(args[i])
72
 
for short, long, _ in optionals:
73
 
    try:
74
 
        user[long] = unicode(opts['-' + short])
75
 
    except KeyError:
76
 
        try:
77
 
            user[long] = unicode(opts['--' + long])
78
 
        except KeyError:
79
 
            pass
80
 
login = user['login']
 
42
usage = """usage: %prog [OPTIONS] <LOGIN> <FULLNAME>
 
43
Creates an IVLE user."""
 
44
 
 
45
parser = optparse.OptionParser(usage)
 
46
parser.add_option("-p", "--password",
 
47
    action="store", dest="password",
 
48
    help="Cleartext password"
 
49
    )
 
50
parser.add_option("-n", "--nick",
 
51
    action="store", dest="nick",
 
52
    help="Display name (defaults to <FULLNAME>)"
 
53
    )
 
54
parser.add_option("-e", "--email",
 
55
    action="store", dest="email",
 
56
    help="Email address"
 
57
    )
 
58
parser.add_option("-s", "--studentid",
 
59
    action="store", dest="studentid",
 
60
    help="Student ID"
 
61
    )
 
62
parser.add_option("--admin",
 
63
    action="store_true", dest="admin",
 
64
    help="Give the user full administrative privileges",
 
65
    default=False
 
66
    )
 
67
 
 
68
(options, args) = parser.parse_args()
 
69
 
 
70
if len(args) != 2:
 
71
    parser.error("incorrect number of arguments")
 
72
 
 
73
user = {'login': unicode(args[0]), 'fullname': unicode(args[1])}
 
74
 
 
75
for attr in ('password', 'nick', 'email', 'studentid', 'admin'):
 
76
    val = getattr(options, attr)
 
77
    if val is not None:
 
78
        if isinstance(val, str):
 
79
            val = unicode(val)
 
80
        user[attr] = val
 
81
 
81
82
if 'nick' not in user:
82
83
    user['nick'] = user['fullname']
83
84
 
84
 
store = get_store(Config())
 
85
config = Config()
 
86
store = get_store(config)
85
87
 
86
 
try:
87
 
    # Make the user's database entry
88
 
    userobj = User(**user)
89
 
    store.add(userobj)
90
 
    enrol_user(store, userobj)
91
 
    store.commit()
92
 
except Exception, message:
93
 
    print "Error: " + str(message)
 
88
if User.get_by_login(store, user['login']) is not None:
 
89
    print "user '%s' already exists" % user['login']
94
90
    sys.exit(1)
95
91
 
96
 
print "Successfully created user %s (%s)." % (login, user['fullname'])
 
92
# Make the user's database entry
 
93
userobj = User(**user)
 
94
store.add(userobj)
 
95
enrol_user(config, store, userobj)
 
96
store.commit()
 
97
 
 
98
print "successfully created user '%s' (%s)." % (userobj.login, userobj.fullname)