partitioncloud-server/partitioncloud/modules/utils.py
2024-02-25 15:54:48 +01:00

96 lines
2.3 KiB
Python

#!/usr/bin/python3
import io
import random
import string
import qrcode
from flask import current_app, send_file
from .db import get_db
def new_uuid():
return ''.join([random.choice(string.ascii_uppercase + string.digits) for _ in range(6)])
def format_uuid(uuid):
"""Format old uuid4 format"""
return uuid.upper()[:6]
def get_qrcode(location):
complete_url = current_app.config["BASE_URL"] + location
img_io = io.BytesIO()
qrcode.make(complete_url).save(img_io)
img_io.seek(0)
return send_file(img_io, mimetype="image/jpeg")
from .classes.user import User
from .classes.album import Album
from .classes.groupe import Groupe
from .classes.partition import Partition
from .classes.attachment import Attachment
from .classes.album import create as create_album
def get_all_partitions():
db = get_db()
partitions = db.execute(
"""
SELECT p.uuid, p.name, p.author, p.body, p.user_id,
CASE WHEN MAX(a.uuid) IS NOT NULL THEN 1 ELSE 0 END AS has_attachment
FROM partition AS p
JOIN contient_partition ON contient_partition.partition_uuid = p.uuid
JOIN album ON album.id = album_id
LEFT JOIN attachments AS a ON p.uuid = a.partition_uuid
GROUP BY p.uuid, p.name, p.author, p.user_id
"""
)
# Transform sql object to dictionary usable in any thread
return [
{
"uuid": p["uuid"],
"name": p["name"],
"author": p["author"],
"body": p["body"],
"user_id": p["user_id"],
"has_attachment": p["has_attachment"]
} for p in partitions
]
def get_all_albums():
db = get_db()
albums = db.execute(
"""
SELECT * FROM album
"""
)
# Transform sql object to dictionary usable in any thread
return [
{
"id": a["id"],
"name": a["name"],
"uuid": a["uuid"]
} for a in albums
]
def user_count():
db = get_db()
count = db.execute(
"""
SELECT COUNT(*) as count FROM user
"""
).fetchone()
return count[0]
def partition_count():
db = get_db()
count = db.execute(
"""
SELECT COUNT(*) FROM partition
"""
).fetchone()
return count[0]