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

« back to all changes in this revision

Viewing changes to ivle/fileservice_lib/action.py

  • Committer: chadnickbok
  • Date: 2009-01-22 02:14:14 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:1173
Fixes Issue #14

When uploading files, students will now be shown an
error message if there upload would replace already existing
files.

This upload will not be performed until it will not clobber
any old files.

Note that there is currently a way to change this behaviour in
the code in action.py, to allow files to be overwritten. However
there is no way this flag can be set through the browser interface
(yet).

Show diffs side-by-side

added added

removed removed

Lines of Context:
135
135
import pysvn
136
136
 
137
137
from ivle import (util, studpath, zip)
 
138
from ivle.fileservice_lib.exceptions import WillNotOverwrite
138
139
import ivle.conf
139
140
 
 
141
 
140
142
def get_login(_realm, existing_login, _may_save):
141
143
    """Callback function used by pysvn for authentication.
142
144
    realm, existing_login, _may_save: The 3 arguments passed by pysvn to
399
401
 
400
402
    Reads fields: 'path', 'data' (file upload, multiple), 'unpack'
401
403
    """
402
 
 
403
404
    # Important: Data is "None" if the file submitted is empty.
404
405
    path = fields.getfirst('path')
405
406
    data = fields['data']
418
419
    for datum in data:
419
420
        # Each of the uploaded files
420
421
        filepath = os.path.join(path, datum.filename)
 
422
        (_, _, filepath_local) = studpath.url_to_jailpaths(filepath)
 
423
        if os.path.isdir(filepath_local):
 
424
            raise ActionError("A directory already exists "
 
425
                    + "with that name")
 
426
        else:
 
427
            if os.path.exists(filepath_local):
 
428
                raise ActionError("A file already exists with that name")
421
429
        filedata = datum.file
422
430
 
423
431
        if unpack and datum.filename.lower().endswith(".zip"):
432
440
                zip.unzip(abspath, filedata)
433
441
            except (OSError, IOError):
434
442
                goterror = True
 
443
            except WillNotOverwrite, e:
 
444
                raise ActionError("File '" + e.filename + "' already exists.")
435
445
        else:
436
446
            # Not a zip file
437
447
            (_, _, filepath_local) = studpath.url_to_jailpaths(filepath)