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

« back to all changes in this revision

Viewing changes to scripts/serveservice

  • Committer: mattgiuca
  • Date: 2008-03-15 09:00:15 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:703
tutorial: (Python + Javascript)
    Added JS function "set_saved_status", which can activate and deactivate
    the save button.
    Modifying the text field now creates a Save timer which takes 10 seconds
    to elapse, then auto-saves the field.
    The save button is only enabled if the text has been modified since
    saving.

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
import mimetypes
27
27
import os
28
28
import conf
29
 
import StringIO
30
 
import urlparse
31
29
 
32
 
from common import (cgirequest, studpath)
33
 
from common import zip as zipmod
 
30
from common import cgirequest
 
31
from common import studpath
34
32
 
35
33
req = cgirequest.CGIRequest()
36
 
req.install_error_handler()
37
 
 
38
 
# Work out the parts of the URL
39
 
url = urlparse.urlparse(req.path)
40
 
querystr = url[4]
41
 
urlpath = url[2]
42
 
filename = studpath.url_to_jailpaths(urlpath)[2]
43
 
 
44
 
default_mimetype = "application/octet-stream"
45
 
zip_mimetype = "application/zip"
46
 
 
47
 
zipmode = False
48
 
zipbasepath = None
49
 
zipfilename = None
50
 
path = None
51
 
 
52
 
# If any "path=" variables have been supplied, bring these into a list and
53
 
# make a zip file instead.
54
 
fields = req.get_fieldstorage()
55
 
paths = fields.getlist("path")
56
 
if len(paths) > 0:
57
 
    zipmode = True
58
 
    zipbasepath = filename
59
 
    zipfilename = os.path.basename(zipbasepath)
60
 
    #for i in range(0, len(paths)):
61
 
        #paths[i] = paths[i].value
62
 
else:
63
 
    if filename is None:
64
 
        req.throw_error(req.HTTP_NOT_FOUND,
65
 
            "The path specified is invalid.")
66
 
    elif not os.access(filename, os.R_OK):
67
 
        req.throw_error(req.HTTP_NOT_FOUND,
68
 
            "The specified file (%s) does not exist." % urlpath)
69
 
     # If it's a directory, serve as a zip file
70
 
    if os.path.isdir(filename):
71
 
        zipmode = True
72
 
        # Zip it from the perspective of its own parent.
73
 
        # That way it will be a directory in the top level of the zip
74
 
        # file.
75
 
        if filename[-1] == os.sep: filename = filename[:-1]
76
 
        splitpath = filename.rsplit(os.sep, 1)
77
 
        if len(splitpath) == 1:
78
 
            zipbasepath = ''
79
 
            paths = [filename]
80
 
        else:
81
 
            zipbasepath = splitpath[0]
82
 
            paths = [splitpath[1]]
83
 
        zipfilename = paths[0]
84
 
 
85
 
if zipmode:
86
 
    req.content_type = zip_mimetype
87
 
    # zipfilename is some filename. Strip trailing slash or extension,
88
 
    # and add ".zip".
89
 
    if zipfilename == '':
90
 
        zipfilename = "files"
91
 
    elif zipfilename[-1] == '/':
92
 
        zipfilename = zipfilename[:-1]
93
 
    elif '.' in zipfilename:
94
 
        zipfilename = zipfilename[:zipfilename.rindex('.')]
95
 
    zipfilename += ".zip"
96
 
    req.headers_out["Content-Disposition"] = ("attachment; filename=" +   
97
 
        zipfilename)
98
 
    zipfile = StringIO.StringIO()
99
 
    zipmod.make_zip(zipbasepath, paths, zipfile)
100
 
        
101
 
    req.write(zipfile.getvalue())
102
 
else:
103
 
    #req.content_type = default_mimetype
104
 
    req.sendfile(filename)
 
34
filename = studpath.url_to_jailpaths(req.path)[2]
 
35
 
 
36
if not os.access(filename, os.R_OK):
 
37
    req.throw_error(req.HTTP_NOT_FOUND, "The specified file does not exist.")
 
38
 
 
39
(type, _) = mimetypes.guess_type(filename)
 
40
if type is None:
 
41
    type = conf.mimetypes.default_mimetype
 
42
 
 
43
req.content_type = type
 
44
req.sendfile(filename)