def save(request): if 'waves_json' not in request.POST or 'name' not in request.POST: response = { 'status': 'failed', 'message': 'waves_json and name arguments must be provied.', } return json_response(response) waves = request.POST['waves_json'] name = request.POST['name'].strip() orig_urlid = re.sub(r'\W+', '-', name) urlid = orig_urlid i = 1 while Instrument.objects.filter(urlid=urlid).exists(): urlid = orig_urlid + "-{i}".format(i=i) i += 1 instrument = Instrument( name=name, urlid=urlid, waves_json=waves, owner=request.META['REMOTE_ADDR'], date=datetime.utcnow(), ) instrument.save() url = 'test' response = { 'status': 'ok', 'url': request.build_absolute_uri(reverse('instrument', kwargs={'urlid': urlid})), } return json_response(response)
def tags_ajax(request): term = request.GET.get("term") if term: tags = Tag.objects.filter(name__startswith=term) else: tags = Tag.objects.all() return json_response([tag.name for tag in tags])
def task_status(request, task_id): response = json_response(status=200, text='ok') status = default_backend.get_status(task_id) res = default_backend.get_result(task_id) response['data'] = { 'id': task_id, 'status': status, 'result': res } if status in default_backend.EXCEPTION_STATES: traceback = default_backend.get_traceback(task_id) response['data'].update({'result': str(res.args[0]), 'exc': get_full_cls_name(res.__class__), 'traceback': traceback}) return response
def event(request, event_id=None): # Create Event if request.method == "POST" and event_id is None: try: event = Event(**normalize_post(request.POST)) event.save() data = event.to_dict() publish("event", "new", data, tags=event.tag_list) return json_response(data) except IntegrityError as err: return json_response({"msg": str(err)}, "error", 400) except DatabaseError as err: return json_response({"msg": str(err)}, "error", 500) # Update Event if request.method == "PUT" and event_id is not None: try: event = Event.objects.get(pk=event_id) event.update(request.read()) event.save() data = event.to_dict() publish("event", "update", data, tags=event.tag_list) return json_response(data) except Event.DoesNotExist as err: return json_response({"msg": str(err)}, "error", 404) # View Events if request.method == "GET" and event_id is None: offset = int(request.GET.get("offset", 0)) limit = int(request.GET.get("limit", 50)) events = Event.objects.order_by("-start") count = events.count() events = events[offset:limit] return json_response({ "events": [event.to_dict() for event in events], "total": count, }) # View Event if request.method == "GET" and event_id: event = Event.objects.get(pk=event_id) return json_response(event.to_dict()) return json_response({"msg": "Invalid Request."}, "error", 400)
def ws_thays(request): cl = request.form.cleaned_data user = request.user if not user: raise Http404 # store the last response if cl['question_id'] and cl['response_id']: #NOTE: this includes cl['response_id'] == '0' tr = set_thay_response(user, cl) params = {'auth_token': user.auth_token, 'question_id': cl['question_id'], 'response_id': cl['response_id'], } make_api_request(config.THAY_API_URL, params) # get the current responses and see what can be asked next trs = user.thayresponse_set question_ids = set([tr.question_id for tr in trs]) num_thays_answered = len([tr for tr in trs if tr.response_id != '0']) question_id = None for id in QUESTION_IDS: if id not in question_ids: question_id = id break # get the question data for the response if question_id: params = { 'app_id': APP_ID, 'auth_token': user.auth_token, 'question_id': question_id, } params['auth_sig'] = sign_request(params) response = make_api_request(GET_QUESTION_API_URL, params) if not response: raise Http404('BAD RESPONSE!', response, params) data = response else: data = {'no_questions': True} data['num_thays_answered'] = num_thays_answered return json_response(data)
def event_details(request, event_id=None): # Set a detail/attribute if request.method == "POST": try: event = Event.objects.get(pk=event_id) data = json.loads(request.read()) payload = { "event_id": event.id, "details": [], } for detail in data["details"]: details_type = detail["details_type"] key = detail["name"] value = detail["value"] mode = detail["mode"] if details_type == "attribute": attributes = Attribute.objects.filter(event=event, key=key) if not attributes or mode == "append": attribute = Attribute(event=event, key=key, value=value) attribute.save() elif mode == "set": for attribute in attributes[1:]: attribute.delete() attribute = attributes[0] attribute.value = value attribute.save() elif details_type == "stream": stream = Stream.objects.filter(event=event, name=key) if stream: stream = stream.get() stream_text = value if mode == "append": stream_text = stream.text + stream_text stream.text = stream_text else: stream = Stream(event=event, name=key, text=value) stream.save() payload["details"].append(detail) publish("event_details", "update", payload, event_id=event.id) return json_response({"msg": ""}) except IntegrityError as err: return json_response({"msg": str(err)}, "error", 400) except DatabaseError as err: return json_response({"msg": str(err)}, "error", 500) # Get Details for an event if request.method == "GET": try: data = {} event = Event.objects.get(pk=event_id) data["event_id"] = event.id data["attributes"] = event.attributes() data["streams"] = [stream.to_dict() for stream in event.streams()] return json_response(data) except Event.DoesNotExist as err: return json_response({"msg": str(err)}, "error", 404)