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

« back to all changes in this revision

Viewing changes to makeuser.py

  • Committer: mattgiuca
  • Date: 2008-03-07 15:12:02 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:669
Timestamps are now stored within the program as Python "time" module's
    "struct_time" objects, rather than strings directly from the DB.
    They are parsed into struct_time objects when reading from the db.
    They are formatted into SQL Timestamp strings when writing to the db.
    This allows them to be manipulated and compared within the program.

common.db: _escape now accepts struct_time objects - it formats them into SQL
            time strings.
common.user: The User constructor now parses "acct_exp", "pass_exp" and
            "last_login" fields as timestamp strings, and stores them
            internally as struct_time.
tutorialservice: When recording a submission, the "date" field is now stored
            as a struct_time, not a formatted string.
login.py: When logging in, uncommented call to write last_login to the DB,
            passing the current local time. (This now works correctly).
            Note that this is done after retrieving the user details, so the
            value of last_login stored in the session is the _old_ last login,
            not the new one (this is intentional).

(With Tom Conway).

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
 
23
23
# Script to create a new user. This can also be done through the
24
24
# administration interface.
 
25
# This script wraps common.makeuser.
 
26
# It also creates a unix account which common.makeuser does not.
 
27
# (This script may not be appropriate for production on a multi-node
 
28
# environment).
25
29
 
26
30
import sys
27
31
import os
28
32
import os.path
 
33
import pwd
 
34
import getopt
 
35
import random
29
36
# Import modules from the website is tricky since they're in the www
30
37
# directory.
31
38
sys.path.append(os.path.join(os.getcwd(), 'www'))
32
39
import conf
33
 
import common.makeuser
34
 
 
35
 
if len(sys.argv) <= 1:
36
 
    print "Usage: python makeuser.py <username>"
37
 
    sys.exit()
38
 
 
39
 
username = sys.argv[1]
 
40
import common.makeuser, common.db
 
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", "rolenm"]
 
46
optionals = [
 
47
    ('p', 'password', "Cleartext password for this user"),
 
48
    ('u', 'unixid', "Numeric unix user id"),
 
49
    ('n', 'nick', "Display name (defaults to <fullname>)"),
 
50
    ('e', 'email', "Email address"),
 
51
    ('s', 'studentid', "Student ID")
 
52
]
 
53
 
 
54
if len(sys.argv) <= 3:
 
55
    # Nicely format the usage message using the optionals
 
56
    print ("Usage: python makeuser.py [OPTIONS] %s\n    OPTIONS"
 
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
if os.getuid() != 0:
 
64
    print "Must run makeuser.py as root."
 
65
    sys.exit(1)
 
66
 
 
67
shorts = ''.join([o[0] + ":" for o in optionals])
 
68
longs = [o[1] + "=" for o in optionals]
 
69
opts, args = getopt.gnu_getopt(sys.argv[1:], shorts, longs)
 
70
opts = dict(opts)
 
71
 
 
72
# Get the dictionary of fields from opts and args
 
73
user = {}
 
74
for i in range(0, len(requireds)):
 
75
    user[requireds[i]] = args[i]
 
76
for short, long, _ in optionals:
 
77
    try:
 
78
        user[long] = opts['-' + short]
 
79
    except KeyError:
 
80
        try:
 
81
            user[long] = opts['--' + long]
 
82
        except KeyError:
 
83
            pass
 
84
login = user['login']
 
85
if 'nick' not in user:
 
86
    user['nick'] = user['fullname']
 
87
 
 
88
# Resolve the user's username into a UID
 
89
if 'unixid' not in user:
 
90
    try:
 
91
        (_,_,uid,_,_,_,_) = pwd.getpwnam(login)
 
92
        user['unixid'] = uid
 
93
    except KeyError:
 
94
        user['unixid'] = random.randrange(5000,10000)
40
95
 
41
96
try:
42
 
    common.makeuser.makeuser(username)
 
97
    # Make the user's database entry
 
98
    common.makeuser.make_user_db(**user)
43
99
except Exception, message:
44
100
    print "Error: " + str(message)
45
101
    sys.exit(1)
46
102
 
47
 
print "Successfully created user " + username + "."
 
103
print "Successfully created user %s (%s)." % (login, user['fullname'])