def context_view(request): if request.method == 'GET': contexts = [] if not 'metric' not in request.GET: return HttpResponse('{ "error" : "missing required parameter \"metric\"" }', mimetype='application/json') for metric in request.GET.getlist('metric'): try: context = STORE.get(metric).context except: contexts.append({ 'metric' : metric, 'error' : 'failed to retrieve context', 'traceback' : traceback.format_exc() }) else: contexts.append({ 'metric' : metric, 'context' : context }) content = json.dumps( { 'contexts' : contexts } ) return HttpResponse(content, mimetype='application/json') elif request.method == 'POST': if 'metric' not in request.POST: return HttpResponse('{ "error" : "missing required parameter \"metric\"" }', mimetype='application/json') newContext = dict( item for item in request.POST.items() if item[0] != 'metric' ) for metric in request.POST.getlist('metric'): STORE.get(metric).updateContext(newContext) return HttpResponse('{ "success" : true }', mimetype='application/json') else: return HttpResponseBadRequest("invalid method, must be GET or POST")
def find_metric(request): """Autocomplete helper on metric names.""" try: query = str( request.REQUEST['q'] ) except: return HttpResponseBadRequest( content="Missing required parameter 'q'", mimetype="text/plain") matches = list( STORE.find(query+"*") ) content = "\n".join([node.metric_path for node in matches ]) response = HttpResponse(content, mimetype='text/plain') return response
def completePath(path, shortnames=False): # Have to extract the path expression from the command for prefix in ('draw ','add ','remove '): if path.startswith(prefix): path = path[len(prefix):] break pattern = re.sub('\w+\(','',path).replace(')','') + '*' results = [] for match in STORE.find(pattern): if shortnames: results.append(match.name) else: results.append(match.metric_path) list_items = ["<li>%s</li>" % r for r in results] list_element = "<ul>" + '\n'.join(list_items) + "</ul>" return list_element