def ticket_list(): authors = None machine = None if 'query' in request.args: query = json.loads(request.args.get('query')) else: status = request.args.get('status', 'needs_review') if status == 'all': query = {} elif status in ('new', 'closed'): query = {'status': {'$regex': status + '.*' }} elif status in ('open'): query = {'status': {'$regex': 'needs_.*|positive_review' }} else: query = {'status': status} if 'todo' in request.args: query['patches'] = {'$not': {'$size': 0}} query['spkgs'] = {'$size': 0} if 'authors' in request.args: authors = request.args.get('authors').split(':') query['authors'] = {'$in': authors} if 'machine' in request.args: machine = request.args.get('machine').split('/') query['reports.machine'] = machine if 'order' in request.args: order = request.args.get('order') else: order = 'last_activity' if 'base' in request.args: base = request.args.get('base') if base == 'all': base = None else: base = 'latest' if 'author' in request.args: query['authors'] = request.args.get('author') if 'participant' in request.args: query['participants'] = request.args.get('participant') all = patchbot.filter_on_authors(tickets.find(query).sort(order), authors) if 'raw' in request.args: if 'pretty' in request.args: indent = 4 else: indent = None response = make_response(json.dumps(list(all), default=lambda x: None, indent=indent)) response.headers['Content-type'] = 'text/plain' return response summary = dict((key, 0) for key in status_order) def preprocess(all): for ticket in all: ticket['report_count'], ticket['report_status'], ticket['report_status_composite'] = get_ticket_status(ticket, machine=machine, base=base or 'latest') if 'reports' in ticket: ticket['pending'] = len([r for r in ticket['reports'] if r['status'] == 'Pending']) summary[ticket['report_status']] += 1 yield ticket ticket0 = db.lookup_ticket(0) versions = list(set(report['base'] for report in ticket0['reports'])) versions.sort(trac.compare_version) versions = [(v, get_ticket_status(ticket0, v)) for v in versions if v != '4.7.'] return render_template("ticket_list.html", tickets=preprocess(all), summary=summary, base=base, base_status=get_ticket_status(db.lookup_ticket(0), base), versions=versions, status_order=status_order)
def ticket_list(): authors = None machine = None query = get_query(request.args) if 'machine' in request.args: machine = request.args.get('machine').split(':') if 'authors' in request.args: authors = request.args.get('authors').split(':') if 'order' in request.args: order = request.args.get('order') else: order = 'last_activity' limit = int(request.args.get('limit', 10000)) print query if 'base' in request.args: base = request.args.get('base') if base == 'all': base = None else: base = 'latest' all = patchbot.filter_on_authors(tickets.find(query).sort(order).limit(limit), authors) if 'raw' in request.args: def filter_reports(all): for ticket in all: ticket['reports'] = list(reversed(sorted(current_reports(ticket), key=lambda report: parse_datetime(report['time']))))[:10] for report in ticket['reports']: report['plugins'] = '...' yield ticket all = filter_reports(all) if 'pretty' in request.args: indent = 4 else: indent = None response = make_response(json.dumps(list(all), default=lambda x: None, indent=indent)) response.headers['Content-type'] = 'text/plain' return response summary = dict((key, 0) for key in status_order) def preprocess(all): for ticket in all: ticket['report_count'], ticket['report_status'], ticket['report_status_composite'] = get_ticket_status(ticket, machine=machine, base=base or 'latest') if 'reports' in ticket: ticket['pending'] = len([r for r in ticket['reports'] if r['status'] == 'Pending']) summary[ticket['report_status']] += 1 yield ticket ticket0 = db.lookup_ticket(0) versions = list(set(report['base'] for report in ticket0['reports'])) versions.sort(compare_version) versions = [(v, get_ticket_status(ticket0, v)) for v in versions if v != '4.7.'] return render_template("ticket_list.html", tickets=preprocess(all), summary=summary, base=base, base_status=get_ticket_status(db.lookup_ticket(0), base), versions=versions, status_order=status_order, compare_version=compare_version)
def post_report(ticket_id): try: ticket = db.lookup_ticket(ticket_id) if ticket is None: ticket = trac.scrape(ticket_id) if 'reports' not in ticket: ticket['reports'] = [] report = json.loads(request.form.get('report')) assert isinstance(report, dict) for fld in ['status', 'patches', 'spkgs', 'base', 'machine', 'time']: assert fld in report patchbot.prune_pending(ticket, report['machine']) ticket['reports'].append(report) db.logs.put(request.files.get('log'), _id=log_name(ticket_id, report)) if 'retry' in ticket: ticket['retry'] = False ticket['last_activity'] = now_str() db.save_ticket(ticket) return "ok" except: traceback.print_exc() return "error"