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),
    }
Exemple #5
0
 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", ""))
Exemple #6
0
 def get_or_404(cls, person_id):
     return cls.from_flat(database.get_person_or_404(person_id))