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

« back to all changes in this revision

Viewing changes to www/apps/userservice/__init__.py

  • Committer: dcoles
  • Date: 2008-08-06 01:32:58 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:981
Groups: Added in support for creating groups in the database through 
userservice (with required capibilities and a new return_insert() database 
function). Implemented create_project_set which requires CAP_MANAGEPROJECTS.

Show diffs side-by-side

added added

removed removed

Lines of Context:
85
85
# Required cap: None (for yourself)
86
86
# Returns a JSON encoded listing of a students is enrollments
87
87
 
 
88
# PROJECTS AND GROUPS
 
89
 
 
90
# userservice/create_project_set
 
91
# Required cap: CAP_MANAGEPROJECTS
 
92
# Creates a project set for a offering - returns the projectsetid
 
93
# Required:
 
94
#   offeringid, max_students_per_group
 
95
 
 
96
# userservice/create_project
 
97
# Required cap: CAP_MANAGEPROJECTS
 
98
# Creates a project in a specific project set
 
99
# Required:
 
100
#   projectsetid
 
101
# Optional:
 
102
#   synopsys, url, deadline
 
103
 
 
104
# userservice/create_group
 
105
# Required cap: CAP_MANAGEGROUPS
 
106
# Creates a project group in a specific project set
 
107
# Required:
 
108
#   projectsetid, groupnm
 
109
# Optional:
 
110
#   nick
 
111
 
 
112
# userservice/assign_to_group
 
113
# Required cap: CAP_MANAGEGROUPS
 
114
# Assigns a user to a project group
 
115
# Required: loginid, groupid
 
116
 
88
117
import os
89
118
import sys
90
119
 
415
444
    req.content_type = "text/plain"
416
445
    req.write(response)
417
446
 
 
447
def handle_create_project_set(req, fields):
 
448
    """Creates a project set for a offering - returns the projectsetid"""
 
449
    
 
450
    if req.method != "POST":
 
451
        req.throw_error(req.HTTP_METHOD_NOT_ALLOWED,
 
452
            "Only POST requests are valid methods to create_user.")
 
453
    # Check if this user has CAP_MANAGEPROJECTS
 
454
    if not req.user.hasCap(caps.CAP_MANAGEPROJECTS):
 
455
        req.throw_error(req.HTTP_FORBIDDEN,
 
456
        "You do not have permission to manage projects.")
 
457
    # Get required fields
 
458
    offeringid = fields.getfirst('offeringid')
 
459
    max_students_per_group = fields.getfirst('max_students_per_group')
 
460
    if offeringid is None or max_students_per_group is None:
 
461
        req.throw_error(req.HTTP_BAD_REQUEST,
 
462
            "Required: offeringid, max_students_per_group")
 
463
 
 
464
    projectsetid = "Not set"
 
465
    # Talk to the DB
 
466
    db = common.db.DB()
 
467
    dbquery = db.return_insert(
 
468
        {
 
469
            'offeringid': offeringid,
 
470
            'max_students_per_group': max_students_per_group,
 
471
        },
 
472
        "project_set",
 
473
        frozenset(["offeringid", "max_students_per_group"]),
 
474
        ["projectsetid"],
 
475
    )
 
476
    db.close()
 
477
    
 
478
    response = cjson.encode(dbquery.dictresult()[0])
 
479
 
 
480
    req.content_type = "text/plain"
 
481
    req.write(response)
 
482
 
 
483
# TODO: write userservice/create_project
 
484
# Required cap: CAP_MANAGEPROJECTS
 
485
# Creates a project in a specific project set
 
486
# Required:
 
487
#   projectsetid
 
488
# Optional:
 
489
#   synopsys, url, deadline
 
490
 
 
491
# TODO: write userservice/create_group
 
492
# Required cap: CAP_MANAGEGROUPS
 
493
# Creates a project group in a specific project set
 
494
# Required:
 
495
#   projectsetid, groupnm
 
496
# Optional:
 
497
#   nick
 
498
 
 
499
# TODO: write userservice/assign_to_group
 
500
# Required cap: CAP_MANAGEGROUPS
 
501
# Assigns a user to a project group
 
502
# Required: loginid, groupid
 
503
 
418
504
# Map action names (from the path)
419
505
# to actual function objects
420
506
actions_map = {
423
509
    "update_user": handle_update_user,
424
510
    "get_user": handle_get_user,
425
511
    "get_enrolments": handle_get_enrolments,
 
512
    "create_project_set": handle_create_project_set,
426
513
}