def new_request_post(): scenario = request.form["scenario"].strip() prompt = request.form["prompt"].strip() # At least one of prompt or scenario must be filled in. if len(scenario) == 0 and len(prompt) == 0: abort(400) status = "draft" if "draft" in request.form else "posted" new_or_saved_character = request.form["new_or_saved_character"] edit_character = "edit_character" in request.form save_character_as = request.form["save_character_as"] # Use saved character verbatim. if new_or_saved_character == "saved" and not edit_character: character = character_query(request.form["character_id"], join_tags=True) # XXX consider making a classmethod for this like with user_chat new_request = Request( user=g.user, status=status, character=character, name=character.name, alias=character.alias, color=character.color, quirk_prefix=character.quirk_prefix, quirk_suffix=character.quirk_suffix, case=character.case, replacements=character.replacements, regexes=character.regexes, scenario=scenario, prompt=prompt, ) new_request.tags = request_tags_from_character(character) new_request.tags += request_tags_from_form(request.form) # Otherwise rely on the form data. else: character = None character_details = validate_character_form(request.form) # Update existing character. if new_or_saved_character == "saved" and save_character_as == "update": character = save_character_from_form(request.form["character_id"], request.form) # Create new character. elif save_character_as == "new": if character_details["title"] == "": character_details["title"] == "Untitled character" character = Character(user=g.user, **character_details) g.db.add(character) g.db.flush() # Neither. elif save_character_as == "temp": pass # oh god how did this get here I am not good with computer else: abort(400) new_request = Request(user=g.user, status=status, character=character, scenario=scenario, prompt=prompt) # The title and tag attributes from the character aren't needed on the # request, so only copy the attributes Requests actually have. for key, value in character_details.iteritems(): if hasattr(new_request, key): setattr(new_request, key, value) if character is not None: new_request.tags = request_tags_from_character(character) new_request.tags += request_tags_from_form(request.form) else: new_request.tags = request_tags_from_form(request.form, include_character_tags=True) g.db.add(new_request) return redirect(url_for("rp_your_request_list"))
def edit_request_post(request_id): search_request = _own_request_query(request_id) search_request.scenario = request.form["scenario"].strip() search_request.prompt = request.form["prompt"].strip() # At least one of prompt or scenario must be filled in. if len(search_request.scenario) == 0 and len(search_request.prompt) == 0: abort(400) if "draft" in request.form: search_request.status = "draft" elif search_request.status != "posted": search_request.status = "posted" # Bump the date if the request is being re-posted. search_request.posted = datetime.datetime.now() new_or_saved_character = request.form["new_or_saved_character"] edit_character = "edit_character" in request.form save_character_as = request.form["save_character_as"] g.db.query(RequestTag).filter(RequestTag.request_id == search_request.id).delete() # Use saved character verbatim. if new_or_saved_character == "saved" and not edit_character: character = character_query(request.form["character_id"], join_tags=True) search_request.character = character search_request.name = character.name search_request.alias = character.alias search_request.color = character.color search_request.quirk_prefix = character.quirk_prefix search_request.quirk_suffix = character.quirk_suffix search_request.case = character.case search_request.replacements = character.replacements search_request.regexes = character.regexes search_request.tags += request_tags_from_character(character) search_request.tags += request_tags_from_form(request.form) # Otherwise rely on the form data. else: character = None character_details = validate_character_form(request.form) # Update existing character. if new_or_saved_character == "saved" and save_character_as == "update": character = save_character_from_form(request.form["character_id"], request.form) # Create new character. elif save_character_as == "new": if character_details["title"] == "": character_details["title"] == "Untitled character" character = Character(user=g.user, **character_details) g.db.add(character) g.db.flush() # Neither. elif save_character_as == "temp": pass # oh god how did this get here I am not good with computer else: abort(400) # The title and tag attributes from the character aren't needed on the # request, so only copy the attributes Requests actually have. for key, value in character_details.iteritems(): if hasattr(search_request, key): setattr(search_request, key, value) if character is not None: search_request.tags += request_tags_from_character(character) search_request.tags += request_tags_from_form(request.form) else: search_request.tags += request_tags_from_form(request.form, include_character_tags=True) return redirect(url_for("rp_edit_request_get", request_id=search_request.id))
def save_character(character_id): # In a separate function so we can call it from request search. character = save_character_from_form(character_id, request.form) return redirect(url_for("rp_character_list"))