Merge branch 'metamodifiedts' into 'master'

feat: add PackageBase.MetaModifiedTS column

See merge request archlinux/aurweb!537
This commit is contained in:
Kevin Morris 2025-01-14 02:41:06 +00:00
commit e5165ff405
6 changed files with 101 additions and 1 deletions

View file

@ -5,6 +5,7 @@ import re
import subprocess import subprocess
import sys import sys
import time import time
from datetime import datetime
import pygit2 import pygit2
import srcinfo.parse import srcinfo.parse
@ -92,7 +93,7 @@ def save_metadata(metadata, conn, user): # noqa: C901
user_id = int(cur.fetchone()[0]) user_id = int(cur.fetchone()[0])
# Update package base details and delete current packages. # Update package base details and delete current packages.
now = int(time.time()) now = int(datetime.utcnow().timestamp())
conn.execute( conn.execute(
"UPDATE PackageBases SET ModifiedTS = ?, " "UPDATE PackageBases SET ModifiedTS = ?, "
+ "PackagerUID = ?, OutOfDateTS = NULL WHERE ID = ?", + "PackagerUID = ?, OutOfDateTS = NULL WHERE ID = ?",
@ -230,6 +231,14 @@ def save_metadata(metadata, conn, user): # noqa: C901
[pkgbase_id, user_id], [pkgbase_id, user_id],
) )
# Update timestamp, set MetaModifiedTS after all the record
# updates we just made.
now = int(datetime.utcnow().timestamp())
conn.execute(
"UPDATE PackageBases SET MetaModifiedTS = ? WHERE ID = ?",
[now, pkgbase_id],
)
conn.commit() conn.commit()

View file

@ -55,6 +55,8 @@ class PackageBase(Base):
self.SubmittedTS = now self.SubmittedTS = now
if not self.ModifiedTS: if not self.ModifiedTS:
self.ModifiedTS = now self.ModifiedTS = now
if not self.MetaModifiedTS:
self.MetaModifiedTS = now
if not self.FlaggerComment: if not self.FlaggerComment:
self.FlaggerComment = str() self.FlaggerComment = str()

View file

@ -123,6 +123,8 @@ async def pkgbase_keywords(
for keyword in new_keywords: for keyword in new_keywords:
db.create(PackageKeyword, PackageBase=pkgbase, Keyword=keyword) db.create(PackageKeyword, PackageBase=pkgbase, Keyword=keyword)
pkgbase.MetaModifiedTS = time.utcnow()
return RedirectResponse(f"/pkgbase/{name}", status_code=HTTPStatus.SEE_OTHER) return RedirectResponse(f"/pkgbase/{name}", status_code=HTTPStatus.SEE_OTHER)

View file

@ -15,6 +15,7 @@ from sqlalchemy import (
String, String,
Table, Table,
Text, Text,
func,
text, text,
) )
from sqlalchemy.dialects.mysql import BIGINT, DECIMAL, INTEGER, TINYINT from sqlalchemy.dialects.mysql import BIGINT, DECIMAL, INTEGER, TINYINT
@ -170,6 +171,12 @@ PackageBases = Table(
Column("FlaggerComment", Text, nullable=False), Column("FlaggerComment", Text, nullable=False),
Column("SubmittedTS", BIGINT(unsigned=True), nullable=False), Column("SubmittedTS", BIGINT(unsigned=True), nullable=False),
Column("ModifiedTS", BIGINT(unsigned=True), nullable=False), Column("ModifiedTS", BIGINT(unsigned=True), nullable=False),
Column(
"MetaModifiedTS",
BIGINT(unsigned=True),
nullable=False,
server_default=func.now(),
),
Column( Column(
"FlaggerUID", ForeignKey("Users.ID", ondelete="SET NULL") "FlaggerUID", ForeignKey("Users.ID", ondelete="SET NULL")
), # who flagged the package out-of-date? ), # who flagged the package out-of-date?

View file

@ -0,0 +1,31 @@
"""add MetaModifiedTS to PackageBase
Revision ID: 42584a60e7a7
Revises: d64e5571bc8d
Create Date: 2022-09-06 12:37:49.460344
"""
from alembic import op
from sqlalchemy.exc import OperationalError
from aurweb.models import PackageBase
# revision identifiers, used by Alembic.
revision = "42584a60e7a7"
down_revision = "d64e5571bc8d"
branch_labels = None
depends_on = None
table = PackageBase.__tablename__
def upgrade():
try:
op.add_column(table, PackageBase.__table__.c.MetaModifiedTS)
except OperationalError as e:
print(e)
print("MetaModifiedTS column already exists")
def downgrade():
op.remove_column(table, "MetaModifiedTS")

49
test/test_migrations.py Normal file
View file

@ -0,0 +1,49 @@
import pytest
from aurweb import db
from aurweb.models import PackageBase, User
from aurweb.time import utcnow
@pytest.fixture(autouse=True)
def setup(db_test: None) -> None:
pass
@pytest.fixture
def user() -> User:
with db.begin():
user_ = db.create(User, Username="test", Email="test@example.org")
yield user_
@pytest.fixture
def pkgbase(user: User) -> PackageBase:
now = utcnow()
with db.begin():
pkgbase_ = db.create(
PackageBase,
Name="pkg",
ModifiedTS=now,
MetaModifiedTS=now,
SubmittedTS=now,
Maintainer=user,
Packager=user,
)
yield pkgbase_
def test_package_base_columns(user: User, pkgbase: PackageBase):
assert pkgbase.Name == "pkg"
assert bool(pkgbase.SubmittedTS)
assert bool(pkgbase.ModifiedTS)
assert bool(pkgbase.MetaModifiedTS)
assert pkgbase.Maintainer == user
assert pkgbase.Packager == user
assert pkgbase.Flagger is None