Exemplo n.º 1
0
    def http_rename_tag(self, request):
        data = json.loads(request.POST["json"])

        old_name = data["old_name"]
        new_name = data["new_name"]

        from synoptic.datamodel import is_valid_tag
        if not is_valid_tag(new_name):
            raise RuntimeError("invalid tag")

        tag = request.dbsession.query(Tag).filter_by(name=old_name).one()
        new_tag_query = request.dbsession.query(Tag).filter_by(name=new_name)

        if new_tag_query.count():
            raise ValueError("tag already exsits")

        tag.name = new_name

        import re

        old_re = re.compile(r"(?:\b|^)%s(?:\b|$)" % re.escape(old_name))

        for v_ord in request.dbsession.query(ViewOrdering).filter(
                ViewOrdering.norm_query.contains(old_name)):
            v_ord.norm_query = old_re.sub(new_name, v_ord.norm_query)

        return request.respond("", mimetype="text/plain")
Exemplo n.º 2
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")