source: cows_wps/trunk/cows_wps/controllers/admin.py @ 7097

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

added admin interface - still needs a db to talk to.

Line 
1import logging
2import re
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.model.managers import requestManager
12from cows_wps.process_handler.context.process_status import STATUS
13from cows_wps.process_handler.validate_arguments import parseDateTime
14
15log = logging.getLogger(__name__)
16
17
18class AdminController(BaseController):
19
20    def index(self):
21       
22        return "Welcome to the admin interface." 
23   
24    def _parseArgs(self):
25        args = {}
26        bad_args = {}
27   
28        for (key, default) in self.default_args.items():
29            value = None
30            if request.params.has_key(key):
31                value = str(request.params.getone(key))
32           
33                # If arg_check is False then bad input
34                arg_check = apply(self.arg_processers[key], [value])
35                if arg_check == False:
36                    bad_args[key] = value
37                    value = default
38                else:
39                    value = arg_check
40            else:
41                value = default
42           
43            args[key] = value
44           
45        return (args, bad_args)
46   
47
48    def _orderJobs(self, jobs, order_by):
49        reverse = False
50
51        if order_by.find("_rev") > -1:
52            order_by = order_by.replace("_rev", "")
53            reverse = True
54
55        indx = self.job_item_order[order_by] 
56        tmp_jobs = [(job[indx], job[:]) for job in jobs]
57        tmp_jobs.sort()
58
59        if reverse:
60            tmp_jobs.reverse()
61         
62        ordered_jobs = [i[1] for i in tmp_jobs]
63        return ordered_jobs
64   
65   
66    def _filterJobs(self, start, n_records, job_desc_match, job_id_match,
67                    job_type, job_status, sub_before, sub_after, order_by):
68        # Get all jobs at start
69        requests = requestManager.getAllRequest()
70       
71        # Define jobs as tuple of (job_id, user, status, job_type, created)
72        # And convert all unicodes
73        jobs = [[str(i) for i in (r.job_id, r.user_id, r.job.status, r.job.type, r.job.created)] for r in requests]
74         
75        for filtr in ("job_id_match", "job_type", "job_status", "sub_before", "sub_after"):
76            jobs = self._filterBy(jobs, filtr, filter_value = vars()[filtr])
77       
78        total_matches = len(jobs)       
79        ordered_jobs = self._orderJobs(jobs, order_by)[start:(start + n_records)]
80        return (ordered_jobs, total_matches)
81   
82   
83    def _filterBy(self, jobs, filtr, filter_value):
84        # Represent jobs as lists of properties
85        if filter_value == None:
86            return jobs
87       
88        indx = self.job_item_order[filtr]
89        test_param = None
90        filter_type = self.filter_types[filtr]
91        filtered_jobs = []
92
93        for job in jobs:
94       
95            item = job[indx]
96       
97            if filter_type == "regex":
98                if not test_param:
99                    test_param = re.compile(filter_value)
100       
101                if test_param.search(item):
102                    filtered_jobs.append(job)
103           
104            elif filter_type.find("time:") == 0:
105                if not test_param:
106                    test_param = filter_value
107       
108                when = filter_type.split(":")[1].strip()
109       
110                if when == "after":
111                    if item > test_param:
112                        filtered_jobs.append(job)
113           
114                elif when == "before":
115                    if item < test_param:
116                        filtered_jobs.append(job)
117           
118            elif filter_type == "equality":
119                if filter_value == item:
120                    filtered_jobs.append(job)
121           
122            elif filter_type == "contains":
123#                raise str(str(item) + str(filter_value))
124                if item in filter_value:
125                    filtered_jobs.append(job)
126
127        return filtered_jobs
128
Note: See TracBrowser for help on using the repository browser.