Files
fotohost/app/__init__.py
T
test2 79b37d1891 first commit
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-06 21:59:09 +03:00

66 lines
1.8 KiB
Python

import os
from datetime import datetime, timezone
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from dotenv import load_dotenv
load_dotenv()
db = SQLAlchemy()
def create_app():
app = Flask(__name__)
app.config["SECRET_KEY"] = os.getenv("SECRET_KEY", "dev-secret-change-me")
app.config["SQLALCHEMY_DATABASE_URI"] = os.getenv(
"DATABASE_URL",
"postgresql://photohost:photohost_secret@localhost:5432/photohost",
)
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
app.config["UPLOAD_FOLDER"] = os.getenv("UPLOAD_FOLDER", "uploads")
app.config["MAX_CONTENT_LENGTH"] = int(os.getenv("MAX_UPLOAD_MB", "10")) * 1024 * 1024
app.config["ALLOWED_EXTENSIONS"] = {"png", "jpg", "jpeg", "gif", "webp", "bmp"}
os.makedirs(app.config["UPLOAD_FOLDER"], exist_ok=True)
db.init_app(app)
from .routes import bp
app.register_blueprint(bp)
with app.app_context():
db.create_all()
return app
class Photo(db.Model):
__tablename__ = "photos"
id = db.Column(db.Integer, primary_key=True)
filename = db.Column(db.String(255), nullable=False)
original_name = db.Column(db.String(255), nullable=False)
file_size = db.Column(db.Integer, nullable=False, default=0)
mime_type = db.Column(db.String(100), nullable=False, default="image/jpeg")
created_at = db.Column(
db.DateTime,
nullable=False,
default=lambda: datetime.now(timezone.utc),
)
@property
def url(self):
return f"/uploads/{self.filename}"
@property
def size_human(self):
size = self.file_size
for unit in ("Б", "КБ", "МБ", "ГБ"):
if size < 1024:
return f"{size:.0f} {unit}" if unit == "Б" else f"{size:.1f} {unit}"
size /= 1024
return f"{size:.1f} ТБ"