source: cows_wps/trunk/cows_wps/controllers/dirlist.py @ 7576

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/cows_wps/trunk/cows_wps/controllers/dirlist.py@7576
Revision 7576, 2.6 KB checked in by astephen, 10 years ago (diff)

Now we can have multiple basedirs set in the config file.

Line 
1import logging
2import os
3
4from pylons import request, response, session, tmpl_context as c
5from pylons.controllers.util import abort, redirect_to
6
7from cows_wps.renderer.ui_renderer import *
8from cows_wps.controllers import *
9from cows_wps.lib.ui.proc_config import *
10
11from cows_wps.utils.create_process_config import createProcessConfig
12
13log = logging.getLogger(__name__)
14
15
16class DirlistController(BaseController):
17
18    def index(self, limit=20):
19        """
20        Takes in an argument and returns a JSON/text list of directories or matching paths.
21        """
22        path = request.params.get("path", None)
23        if path == None:
24            return "ERROR: Please provide an argument path=<Something>"
25
26        proc_id = request.params.get("proc_id", None)
27        if proc_id == None:
28            return "ERROR: Please provide a valid proc_id."
29
30        """
31        try:
32            proc_config = createProcessConfig(proc_id)["Capabilities"]
33            basedir = proc_config["DataInputs"]["FilePath"]["basedir"]
34            basedir = basedir.rstrip("/")
35        except:
36            return "Unrecognised proc_id: %s" % proc_id
37
38        dr = os.path.split(path)[0]
39        top_dir = os.path.split(dr)[-1]
40
41        if not os.path.isdir(dr) or top_dir[0] == ".":
42            return "ERROR: Please provide a valid directory."
43        elif dr.find(basedir) < 0 and dr != basedir:
44            return "ERROR: Invalid directory or not allowed."
45        """
46        try:
47            proc_config = createProcessConfig(proc_id)["Capabilities"]
48            basedirs = proc_config["DataInputs"]["FilePath"]["basedir"]
49        except:
50            return "Unrecognised proc_id: %s" % proc_id
51
52        basedirs = [basedir.rstrip("/") for basedir in basedirs]
53
54        dr = os.path.split(path)[0]
55        top_dir = os.path.split(dr)[-1]
56
57        if not os.path.isdir(dr) or top_dir[0] == ".":
58            return "ERROR: Please provide a valid directory."
59        elif len([basedir for basedir in basedirs if dr.find(basedir) > -1]) == 0 and dr not in basedirs:
60             return "ERROR: Invalid directory or not allowed."
61
62        items = [os.path.join(dr, x) for x in os.listdir(dr) if x[0] != "."]
63        items.sort()
64
65        if len(items) > limit:
66            items = items[:limit] + ["...more than I can be bothered to list..."]
67
68        if os.path.isdir(path):
69            return str([str(i) for i in items])
70
71        litems = [i.lower() for i in items]
72        lpath = path.lower()
73        resp = []
74
75        for (i, item) in enumerate(litems):
76            if item.find(lpath) == 0:
77                resp.append(items[i])
78
79        return str([str(i) for i in resp])
80
Note: See TracBrowser for help on using the repository browser.