def claim_listing(permalink): """Allow a seller to claim a listing whose email they have lost.""" # Look up the existing listing used for this person. listing = helpers.lookup_listing(permalink) if not listing: abort(404) # Follow policy when sending an email to the user. try: policy.claim_listing(listing) except ValidationError, e: flash(str(e), "danger")
def new_listing(): """Creates or removes this listing.""" # Populate a form to create a listing. form = forms.NewListingForm() # Create a temporary listing so that photos can be uploaded. listing = entities.Listing( key_name=str(uuid.uuid4()), # FIXME: add proper permalink generator. title=form.title.data, price=int(form.price.data * 100) if form.price.data else 0, body=form.description.data, categories=form.categories.data or [], seller=form.seller.data, posting_time=(time.time() if session.get("email") else 0.0), admin_key=str(uuid.uuid4())) # Ensure that validations check with policy. form.post_validate = lambda: policy.claim_listing(listing) # Allow uploading and saving the given request. is_valid = form.validate_on_submit() if request.method == "POST": photos = [] for photo in form.photos: if not photo.data: continue image = photo.data["image"] if not image or (hasattr(image, "filename") and not image.filename): continue photos.append(image) listing.photos = photos # Allow anyone to create listings. if is_valid: # Update the listing on the server. listing.put() helpers.invalidate_listing(listing) # Only allow the user to see the listing if they are signed in. if session.get("email") == listing.seller: flash("Your listing has been published.") return redirect( url_for("show_listing", permalink=listing.permalink)) else: flash("Your listing has been created. " "Click the link in your email to publish it.") return redirect(url_for("search_listings")) # Have the form email default to the value from the session. if not form.seller.data: form.seller.data = session.get("email") # Display the photo URL of any uploaded photos. for index, entry in enumerate(form.photos.entries): if index < len(listing.photos): entry["image"].data = listing.photos[index] else: entry["image"].data = None return render_template("listing_form.html", type="New", form=form)
def new_listing(): """Creates or removes this listing.""" # Populate a form to create a listing. form = forms.NewListingForm() # Create a temporary listing so that photos can be uploaded. listing = entities.Listing( key_name=str(uuid.uuid4()), # FIXME: add proper permalink generator. title=form.title.data, price=int(form.price.data * 100) if form.price.data else 0, body=form.description.data, categories=form.categories.data or [], seller=form.seller.data, posting_time=(time.time() if session.get("email") else 0.0), admin_key=str(uuid.uuid4()) ) # Ensure that validations check with policy. form.post_validate = lambda: policy.claim_listing(listing) # Allow uploading and saving the given request. is_valid = form.validate_on_submit() if request.method == "POST": photos = [] for photo in form.photos: if not photo.data: continue image = photo.data["image"] if not image or (hasattr(image, "filename") and not image.filename): continue photos.append(image) listing.photos = photos # Allow anyone to create listings. if is_valid: # Update the listing on the server. listing.put() helpers.invalidate_listing(listing) # Only allow the user to see the listing if they are signed in. if session.get("email") == listing.seller: flash("Your listing has been published.") return redirect(url_for("show_listing", permalink=listing.permalink)) else: flash("Your listing has been created. " "Click the link in your email to publish it.") return redirect(url_for("search_listings")) # Have the form email default to the value from the session. if not form.seller.data: form.seller.data = session.get("email") # Display the photo URL of any uploaded photos. for index, entry in enumerate(form.photos.entries): if index < len(listing.photos): entry["image"].data = listing.photos[index] else: entry["image"].data = None return render_template("listing_form.html", type="New", form=form)