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

« back to all changes in this revision

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

  • Committer: mattgiuca
  • Date: 2008-01-10 03:39:00 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:157
Fileservice: Added action "putfile".
    This caters for both file uploads and saving from the editor.

Show diffs side-by-side

added added

removed removed

Lines of Context:
125
125
    # side-effects on the server.
126
126
    action = None
127
127
    fields = None
128
 
    # FIXME: Remove "True", making sure only POST
129
 
    if True or req.method == 'POST':
 
128
    if req.method == 'POST':
130
129
        fields = req.get_fieldstorage()
131
130
        action = fields.getfirst('action')
132
131
 
287
286
    May raise an ActionError("Invalid path"). The caller is expected to
288
287
    let this fall through to the top-level handler, where it will be
289
288
    put into the HTTP response field. Never returns None.
 
289
 
 
290
    Does not mutate req.
290
291
    """
291
292
    if path is None:
292
293
        path = req.path
305
306
def action_remove(req, fields):
306
307
    # TODO: Do an SVN rm if the file is versioned.
307
308
    # TODO: Disallow removal of student's home directory
308
 
    """Removes a list of files or directories."""
 
309
    """Removes a list of files or directories.
 
310
 
 
311
    Reads fields: 'path' (multiple)
 
312
    """
309
313
    paths = fields.getlist('path')
310
314
    goterror = False
311
315
    for path in paths:
326
330
            raise ActionError(
327
331
                "Could not delete one or more of the files specified")
328
332
 
 
333
def action_putfile(req, fields):
 
334
    """Writes data to a file, overwriting it if it exists and creating it if
 
335
    it doesn't.
 
336
 
 
337
    Reads fields: 'path', 'data' (file upload)
 
338
    """
 
339
    path = fields.getfirst('path')
 
340
    data = fields.getfirst('data')
 
341
    if path is None: raise ActionError("No path specified")
 
342
    if data is None: raise ActionError("No data specified")
 
343
    path = actionpath_to_local(req, path)
 
344
    data = data.file
 
345
 
 
346
    # Copy the contents of file object 'data' to the path 'path'
 
347
    try:
 
348
        dest = open(path, 'wb')
 
349
        shutil.copyfileobj(data, dest)
 
350
    except OSError:
 
351
        raise ActionError("Could not write to target file")
 
352
 
329
353
# Table of all action functions #
330
354
 
331
355
actions_table = {
332
356
    "remove" : action_remove,
 
357
    "putfile" : action_putfile,
333
358
}