Add release download size to API and web interface

This commit is contained in:
rubenwardy
2023-12-15 16:33:34 +00:00
parent 0e5158704e
commit e9911e85a2
4 changed files with 30 additions and 1 deletions

View File

@@ -17,6 +17,7 @@
import datetime
import enum
import os
from flask import url_for
from flask_babel import lazy_gettext
@@ -979,6 +980,23 @@ class PackageRelease(db.Model):
def file_path(self):
return self.url.replace("/uploads/", app.config["UPLOAD_DIR"])
@property
def file_size_bytes(self):
path = self.file_path
if not os.path.isfile(path):
return 0
file_stats = os.stat(path)
return file_stats.st_size
@property
def file_size(self):
size = self.file_size_bytes / 1024
if size > 1024:
return f"{round(size / 1024, 1)} MB"
else:
return f"{round(size)} KB"
def as_dict(self):
return {
"id": self.id,
@@ -989,6 +1007,7 @@ class PackageRelease(db.Model):
"downloads": self.downloads,
"min_minetest_version": self.min_rel and self.min_rel.as_dict(),
"max_minetest_version": self.max_rel and self.max_rel.as_dict(),
"size": self.file_size_bytes,
}
def as_long_dict(self):
@@ -1001,7 +1020,8 @@ class PackageRelease(db.Model):
"downloads": self.downloads,
"min_minetest_version": self.min_rel and self.min_rel.as_dict(),
"max_minetest_version": self.max_rel and self.max_rel.as_dict(),
"package": self.package.as_key_dict()
"package": self.package.as_key_dict(),
"size": self.file_size_bytes,
}
def get_edit_url(self):