Esempio n. 1
0
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)
Esempio n. 2
0
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])
Esempio n. 3
0
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])
Esempio n. 4
0
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
Esempio n. 5
0
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)
Esempio n. 7
0
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)