Beispiel #1
0
    def http_get_tags_for_query(self, request):
        if "max_timestamp" in request.GET:
            max_timestamp = float(request.GET["max_timestamp"])
        else:
            max_timestamp = None

        query = request.GET.get("query", "")

        if query != "":
            from synoptic.query import parse_query
            parsed_query = parse_query(query)

            from synoptic.query import TagListVisitor
            query_tags = parsed_query.visit(TagListVisitor())
        else:
            parsed_query = None
            query_tags = []

        result = self.get_tags_with_usecounts(
                request.dbsession, request.datamodel, parsed_query,
                max_timestamp)

        tags = [list(row) for row in result]

        return request.respond(
                json.dumps({
                    "tags": tags,
                    "query_tags": query_tags,
                    }),
                mimetype="text/plain")
Beispiel #2
0
    def http_get_items(self, request):
        qry = request.GET.get("query", "")

        from synoptic.query import parse_query
        parsed_query = parse_query(qry)

        if "max_timestamp" in request.GET:
            max_timestamp = float(request.GET["max_timestamp"])
        else:
            max_timestamp = None

        json_items = self.get_json_items(
                request.dbsession, request.datamodel,
                parsed_query, max_timestamp)

        if qry != "":
            tag_counter = {}
            for it in json_items:
                for tag in it["tags"]:
                    tag_counter[tag] = tag_counter.get(tag, 0) + 1

            tags = [list(it) for it in six.iteritems(tag_counter)]
            tags.sort()

            from synoptic.query import TagListVisitor
            query_tags = parsed_query.visit(TagListVisitor())
        else:
            # the empty query parses as "home", but we need to show
            # all tags, not just the ones relative to that,

            if "max_timestamp" in request.GET:
                max_timestamp = float(request.GET["max_timestamp"])
            else:
                max_timestamp = None

            tags = [list(row)
                    for row in self.get_tags_with_usecounts(
                        request.dbsession, request.datamodel,
                        max_timestamp=max_timestamp)]

            query_tags = []

        # kind of silly to do two JSON encodes, but what the heck
        result_hash = hash(json.dumps(json_items))

        # and ship them out by JSON
        return request.respond(json.dumps({
            "items": json_items,
            "result_hash": result_hash,
            "tags": tags,
            "query_tags": query_tags,
            }),
                mimetype="text/plain")
Beispiel #3
0
    def http_store_item(self, request):
        data = json.loads(request.POST["json"])

        current_query = data.pop("current_query", None)
        deleting = data["contents"] is None

        # if view ordering is present for current query,
        # make sure this entry shows up last
        if not deleting:
            # if we're not deleting
            from synoptic.datamodel import ViewOrderingHandler
            from synoptic.query import parse_query
            voh = ViewOrderingHandler(
                    request.dbsession, request.datamodel,
                    parse_query(current_query))
            if voh.has_ordering():
                voh.load()
                if data["id"] in voh:
                    # we already have a spot in the ordering, don't bother
                    voh = None
            else:
                voh = None
        else:
            voh = None

        if not deleting:
            set_with_parsed_datetime(data, "start_date",
                    use_utc=data["all_day"])
            set_with_parsed_datetime(data, "end_date", "start_date",
                    use_utc=data["all_day"])
            set_with_parsed_datetime(data, "hide_until", "start_date")
            set_with_parsed_datetime(data, "highlight_at", "start_date")

        if not deleting:
            from synoptic.datamodel import is_valid_tag
            for tag in data["tags"]:
                if not is_valid_tag(tag):
                    raise RuntimeError("invalid tag")

        itemversion = store_itemversion(request.dbsession,
                **data)

        request.dbsession.commit()  # fills in the item_id

        if voh is not None:
            voh.insert(len(voh), itemversion.item_id)
            voh.save()

        # send response
        return request.respond(
                json.dumps(self.item_to_json(itemversion)),
                mimetype="text/plain")
Beispiel #4
0
    def http_reorder_item(self, request):
        data = json.loads(request.POST["json"])

        from synoptic.query import parse_query
        from synoptic.datamodel import ViewOrderingHandler

        if data["new_order"]:
            voh = ViewOrderingHandler(
                    request.dbsession, request.datamodel,
                    parse_query(data["current_search"]))
            voh.load()
            voh.set_order([int(x) for x in data["new_order"].split(",")])
            voh.save()

        return request.respond("", mimetype="text/plain")
Beispiel #5
0
    def get_itemversions_for_request(self, request):
        from synoptic.query import parse_query
        parsed_query = parse_query(request.GET.get("query", ""))

        if "max_timestamp" in request.GET:
            max_timestamp = float(request.GET["max_timestamp"])
        else:
            max_timestamp = None

        session = request.dbsession
        model = request.datamodel

        # grab the ORMed instances
        return (session
                .query(ItemVersion)
                .from_statement(query_itemversions(
                    session, model, parsed_query, max_timestamp)))
Beispiel #6
0
    def http_get_result_hash(self, request):
        qry = request.GET.get("query", "")

        from synoptic.query import parse_query
        parsed_query = parse_query(qry)

        if "max_timestamp" in request.GET:
            max_timestamp = float(request.GET["max_timestamp"])
        else:
            max_timestamp = None

        json_items = self.get_json_items(
                request.dbsession, request.datamodel,
                parsed_query, max_timestamp)

        result_hash = hash(json.dumps(json_items))

        # and ship them out by JSON
        return request.respond(json.dumps(result_hash),
                mimetype="text/plain")