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

« back to all changes in this revision

Viewing changes to www/apps/fileservice/action.py

  • Committer: mattgiuca
  • Date: 2008-01-10 07:25:38 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:166
fileservice:
    * Moved the svnclient object out to the sub-modules (each has their own).
        Makes it easier for them to be global.
    * Added new discussion about how putfile action should change (zip uploads
        and multiple file uploads).
    * Added action svnadd.

Show diffs side-by-side

added added

removed removed

Lines of Context:
41
41
#       to:     The path of the target filename. Error if the file already
42
42
#               exists.
43
43
#
44
 
# action=putfile: Upload a file to the student workspace.
 
44
# action=putfile: Upload a file to the student workspace, and optionally
 
45
#               accept zip files which will be unpacked.
45
46
#       path:   The path to the file to be written. If it exists, will
46
47
#               overwrite. Error if the target file is a directory.
47
48
#       data:   Bytes to be written to the file verbatim. May either be
48
49
#               a string variable or a file upload.
 
50
#       unpack: Optional. If "true", and the data is a valid ZIP file,
 
51
#               will create a directory instead and unpack the ZIP file
 
52
#               into it.
 
53
#
 
54
# action=putfiles: Upload multiple files to the student workspace, and
 
55
#                 optionally accept zip files which will be unpacked.
 
56
#       path:   The path to the DIRECTORY to place files in. Must not be a
 
57
#               file.
 
58
#       data:   A file upload (may not be a simple string). The filename
 
59
#               will be used to determine the target filename within
 
60
#               the given path.
 
61
#       unpack: Optional. If "true", if any data is a valid ZIP file,
 
62
#               will create a directory instead and unpack the ZIP file
 
63
#               into it.
 
64
#
 
65
# The differences between putfile and putfiles are:
 
66
# * putfile can only accept a single file.
 
67
# * putfile can accept string data, doesn't have to be a file upload.
 
68
# * putfile ignores the upload filename, the entire filename is specified on
 
69
#       path. putfiles calls files after the name on the user's machine.
49
70
#
50
71
# Clipboard-based actions. Cut/copy/paste work in the same way as modern
51
72
# file browsers, by keeping a server-side clipboard of files that have been
92
113
#               message if unspecified.
93
114
94
115
# TODO: Implement the following actions:
95
 
#   move, copy, cut, paste, svnadd, svnrevert, svnupdate, svncommit
 
116
#   putfiles, svnrevert, svnupdate, svncommit
 
117
# TODO: Implement ZIP unpacking in putfile and putfiles.
96
118
 
97
119
import os
98
120
import shutil
101
123
 
102
124
from common import (util, studpath)
103
125
 
 
126
# Make a Subversion client object
 
127
svnclient = pysvn.Client()
 
128
 
104
129
DEFAULT_LOGMESSAGE = "No log message supplied."
105
130
 
106
131
# Mime types
120
145
    """
121
146
    pass
122
147
 
123
 
def handle_action(req, svnclient, action, fields):
 
148
def handle_action(req, action, fields):
124
149
    """Perform the "action" part of the response.
125
150
    This function should only be called if the response is a POST.
126
151
    This performs the action's side-effect on the server. If unsuccessful,
356
381
    del session['clipboard']
357
382
    session.save()
358
383
 
 
384
def action_svnadd(req, fields):
 
385
    """Performs a "svn add" to each file specified.
 
386
 
 
387
    Reads fields: 'path'
 
388
    """
 
389
    paths = fields.getlist('path')
 
390
    paths = map(lambda path: actionpath_to_local(req, path), paths)
 
391
 
 
392
    try:
 
393
        svnclient.add(paths, recurse=True, force=True)
 
394
    except pysvn.ClientError:
 
395
        raise ActionError("One or more files could not be added")
 
396
 
359
397
# Table of all action functions #
360
398
# Each function has the interface f(req, fields).
361
399
 
367
405
    "copy" : action_copy,
368
406
    "cut" : action_cut,
369
407
    "paste" : action_paste,
 
408
 
 
409
    "svnadd" : action_svnadd,
370
410
}