Changeset 25969
- Timestamp:
- 12/05/08 21:59:50 (5 weeks ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
platform/trac/plugins/querychart/trunk/querychart/macro.py
r25949 r25969 52 52 53 53 54 def _urlstring_to_reqarg(self,urlstr): 55 args={} 56 for uslarg in urlstr[1:].split('&'): 57 uslarg_sp = uslarg.split('=') 58 key = uslarg_sp[0] 59 val = '='.join(uslarg_sp[1:]) 60 if len(val)>1 and val[0] in ['~','^','$','!']: 61 if val[0] == '!': 62 args[key+'_mode']=val[:1] 63 val = val[2:] 64 else: 65 args[key+'_mode']=val[0] 66 val = val[1:] 67 if not args.get(key): 68 args[key] = [] 69 args[key].append(val) 70 return args 71 72 def _get_constraints(self, args): 73 74 constraints = {} 75 ticket_fields = [f['name'] for f in 76 TicketSystem(self.env).get_ticket_fields()] 77 ticket_fields.append('id') 78 79 for field in [k for k in args.keys() if k in ticket_fields]: 80 vals = args[field] 81 if not isinstance(vals, (list, tuple)): 82 vals = [vals] 83 if vals: 84 mode = args.get(field + '_mode') 85 if mode: 86 vals = [mode + x for x in vals] 87 constraints[field] = vals 88 89 return constraints 90 54 91 55 92 def _make_data(self,req,opts): … … 61 98 upper = opts['upper'] 62 99 63 query_str = query_str[1:] + ''.join(['&col=%s'%field 64 for field in fieldlist]) 65 query = Query.from_string(self.env, query_str) 100 if len(query_str)>1 and query_str[0]!='?': 101 query_str = query_str + ''.join(['&col=%s'%field 102 for field in fieldlist]) 103 query = Query.from_string(self.env, query_str) 104 elif len(query_str)>1 and query_str[0]=='?': 105 constraints = self._get_constraints(self._urlstring_to_reqarg(query_str)) 106 query = Query(self.env, constraints=constraints, cols=fieldlist) 107 else: 108 constraints = self._get_constraints(req.args) 109 query = Query(self.env, constraints=constraints, cols=fieldlist) 110 66 111 self.log.debug(query.get_sql()) 67 112 result = query.execute(req, db=None, cached_ids=None) … … 95 140 96 141 if len(edgedays)==0: 97 return {}#'''No data to output.'''142 return None#'''No data to output.''' 98 143 99 144 x_min = min(edgedays) … … 133 178 134 179 135 136 # make script string137 linenum=1138 outs = []139 vals = []140 for line in lines:141 datastrings = []142 for p in line:143 if upper_flag:144 datastrings.append('[%d,%d]'%(to_timestamp(p.date)*1000,p.count))145 else:146 datastrings.append('[%d,%d]'%(to_timestamp(p.date)*1000,result_len-p.count))147 outs.append( 'var d%s = [%s];'%(str(linenum),','.join(datastrings)))148 vals.append( '{label:"%s",data:d%s}'%(fieldlist[linenum-1],str(linenum)))149 linenum = linenum+1150 151 180 def expand_macro(self, formatter, name, content): 152 181 req = formatter.req … … 165 194 'max':None, 166 195 'min':None, 167 'query': None,196 'query':'', 168 197 'col':[], 169 198 'per':'week', … … 171 200 } 172 201 collabel={} 202 ticket_fields = TicketSystem(self.env).get_ticket_fields() 203 173 204 for arg in content.split(','): 174 205 colon_split = arg.split(':') … … 180 211 value = True 181 212 if key=='col': 182 ticket_fields = TicketSystem(self.env).get_ticket_fields()183 213 if value=='time': 184 214 opts[key].append('time') … … 200 230 201 231 232 202 233 data = self._make_data(req,opts) 234 if data==None: 235 raise TracError('No data matched') 203 236 fieldlist = data['fieldlist'] 204 237 x_axis = data['x_axis']
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)