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")
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")