roundabout,
created on Wednesday, 14 August 2024, 16:44:18 (1723653858),
received on Thursday, 15 August 2024, 07:42:21 (1723707741)
Author identity: vlad <vlad.muntoiu@gmail.com>
46b698a6f20e1386e39661df4e7552d1fdef093c
app.py
@@ -10,6 +10,7 @@ from flask_migrate import Migrate
from jinja2_fragments.flask import render_block from sqlalchemy.orm import backref import sqlalchemy.dialects.postgresql from os import pathimport config import markdown
@@ -61,8 +62,10 @@ with app.app_context():
class PictureLicence(db.Model): resource_id = db.Column(db.Integer, db.ForeignKey("picture_resource.id"), primary_key=True)licence_id = db.Column(db.String(32), db.ForeignKey("licence.id"), primary_key=True)id = db.Column(db.Integer, primary_key=True, autoincrement=True) resource_id = db.Column(db.Integer, db.ForeignKey("picture_resource.id")) licence_id = db.Column(db.String(32), db.ForeignKey("licence.id"))resource = db.relationship("PictureResource", back_populates="licences") licence = db.relationship("Licence", back_populates="pictures")
@@ -151,7 +154,7 @@ with app.app_context():
file_format = db.Column(db.String(64), nullable=False) # MIME type width = db.Column(db.Integer, nullable=False) height = db.Column(db.Integer, nullable=False) nature_id = db.Column(db.String(32), db.ForeignKey("picture_nature.id"), nullable=False)nature_id = db.Column(db.String(32), db.ForeignKey("picture_nature.id"), nullable=True)nature = db.relationship("PictureNature", back_populates="resources")
@@ -166,13 +169,13 @@ with app.app_context():
licences = db.relationship("PictureLicence", back_populates="resource") def __init__(self, title, description, origin_url, licence_ids, mime, size, nature,def __init__(self, title, description, origin_url, licence_ids, mime, nature=None,replaces=None): self.title = title self.description = description self.origin_url = origin_url self.file_format = mime self.width, self.height = sizeself.width = self.height = 0self.nature = nature db.session.add(self) db.session.commit()
@@ -269,3 +272,49 @@ def profile(username):
return flask.abort(404) return flask.render_template("profile.html", user=user) @app.route("/upload") def upload(): return flask.render_template("upload.html") @app.route("/upload", methods=["POST"]) def upload_post(): title = flask.request.form["title"] description = flask.request.form["description"] origin_url = flask.request.form["origin_url"] file = flask.request.files["file"] if not file or not file.filename: flask.flash("No selected file") return flask.redirect(flask.request.url) resource = PictureResource(title, description, origin_url, ["CC0-1.0"], file.mimetype) db.session.add(resource) db.session.commit() file.save(path.join(config.DATA_PATH, "pictures", str(resource.id))) return flask.redirect("/picture/" + str(resource.id)) @app.route("/picture/<int:id>") def picture(id): resource = db.session.get(PictureResource, id) if resource is None: return flask.abort(404) return flask.render_template("picture.html", resource=resource) @app.route("/raw/picture/<int:id>") def raw_picture(id): resource = db.session.get(PictureResource, id) if resource is None: return flask.abort(404) response = flask.send_from_directory(path.join(config.DATA_PATH, "pictures"), str(resource.id)) response.mimetype = resource.file_format return response
templates/picture.html
@@ -0,0 +1,14 @@
{% extends "default.html" %} {% block title %}Picture | gigadata{% endblock %} {% block content %} <x-frame style="--width: 768px"> <h1>{{ resource.title }}</h1> <p>{{ resource.description }}</p> <img src="/raw/picture/{{ resource.id }}" alt="{{ resource.title }}"> <p> <a href="{{ resource.origin_url }}">Original source</a> | <a href="/raw/picture/{{ resource.id }}">View</a> | <a href="/raw/picture/{{ resource.id }}" download="GigadataPicture_{{ resource.id }}">Download</a> </p> </x-frame> {% endblock %}
templates/upload.html
@@ -0,0 +1,26 @@
{% extends "default.html" %} {% block title %}Upload | gigadata{% endblock %} {% block content %} <x-frame style="--width: 768px"> <form method="POST" class="vbox" enctype="multipart/form-data"> <h2>Upload</h2> <label> Name <input type="text" name="title" required> </label> <label> Description <textarea name="description" required></textarea> </label> <label> Origin URL <input type="url" name="origin_url" required> </label> <label> File <input type="file" name="file" required> </label> <button type="submit">Upload</button> </form> </x-frame> {% endblock %}