def photo(person_id): session = database.get_session() person_row = database.get_person_or_404(person_id) try: db_file = session.get_db_file(int(person_row["photo_id"])) except KeyError: flask.abort(404) return flask.Response(''.join(db_file.iter_data()), # TODO stream response mimetype="application/octet-stream")
def edit(person_id=None): app = flask.current_app session = database.get_session() if person_id is None: person_row = None template = "participant/create.html" else: person_row = database.get_person_or_404(person_id) template = "participant/edit.html" if flask.request.method == "POST": form_data = dict(schema.PersonSchema.from_defaults().flatten()) form_data.update(flask.request.form.to_dict()) person_schema = schema.PersonSchema.from_flat(form_data) if person_schema.validate(): if person_row is None: person_row = database.PersonRow() person_row.update(person_schema.flatten()) session.save(person_row) session.commit() flask.flash("Person information saved", "success") view_url = flask.url_for("participant.view", person_id=person_row.id) return flask.redirect(view_url) else: flask.flash(u"Errors in person information", "error") else: if person_row is None: person_schema = schema.PersonSchema() else: person_schema = schema.PersonSchema.from_flat(person_row) return flask.render_template(template, **{ "mk": sugar.MarkupGenerator( app.jinja_env.get_template("widgets/widgets_edit.html") ), "person_schema": person_schema, "person_id": person_id, })
def view(person_id): app = flask.current_app if flask.request.method == "DELETE": session = database.get_session() session.table(database.PersonRow).delete(person_id) session.commit() return flask.jsonify({"status": "success"}) person_row = database.get_person_or_404(person_id) person_schema = schema.PersonSchema.from_flat(person_row) person = person_schema.value person.id = person_id return { "mk": sugar.MarkupGenerator( app.jinja_env.get_template("widgets/widgets_view.html") ), "person_schema": person_schema, "person": person, }
def edit_photo(person_id): if flask.request.method == "POST": photo_file = flask.request.files["photo"] is_ajax = flask.request.form.get("is_ajax", None) response = {"status": "error"} if photo_file.filename != u'': session = database.get_session() db_file = session.get_db_file() db_file.save_from(photo_file) person_row = database.get_person_or_404(person_id) person_row["photo_id"] = str(db_file.id) session.save(person_row) session.commit() url = flask.url_for("participant.view", person_id=person_id) response["status"] = "success" response["url"] = flask.url_for("participant.photo", person_id=person_id) if not is_ajax: flask.flash("New photo saved", "success") return flask.redirect(url) else: response["error"] = "Please select a photo" if not is_ajax: flask.flash(response["error"], "error") if is_ajax: return flask.json.dumps(response) return { "person": schema.Person.get_or_404(person_id), }
def has_photo(self): assert self.id is not None person_row = database.get_person_or_404(self.id) return bool(person_row.get("photo_id", ""))
def get_or_404(cls, person_id): return cls.from_flat(database.get_person_or_404(person_id))