feat: audit full alpha catalog
CI / backend-and-migrations (push) Canceled after 0s
CI / astro-build (push) Canceled after 0s
CI / compose-e2e (push) Canceled after 0s

This commit is contained in:
ik
2026-09-07 09:37:01 +07:00
parent 600abd81f5
commit c4d1c8b87b
6 changed files with 61 additions and 6 deletions
+7 -1
View File
@@ -11,6 +11,7 @@ from .importer import import_records
from .community_importer import stage_observations
from .retention import RetentionPolicy, apply_retention
from .storage import delete_screenshot
from .catalog_audit import audit_catalog
def main() -> int:
@@ -25,6 +26,7 @@ def main() -> int:
community.add_argument("--limit", type=int, default=500)
cleanup = sub.add_parser("cleanup-retention")
cleanup.add_argument("--apply", action="store_true", help="apply changes; default is dry-run")
sub.add_parser("audit-catalog")
args = parser.parse_args()
with SessionLocal() as session:
if args.command == "import-records":
@@ -43,7 +45,7 @@ def main() -> int:
parser.error("input must be a JSON array")
created, updated = stage_observations(session, payload[:args.limit])
print(f"staged: created={created} updated={updated}")
else:
elif args.command == "cleanup-retention":
policy = RetentionPolicy(
submission_days=settings.retention_submission_days,
unreviewed_days=settings.retention_unreviewed_days,
@@ -54,6 +56,10 @@ def main() -> int:
)
counts = apply_retention(session, policy=policy, dry_run=not args.apply, delete_object=delete_screenshot)
print(json.dumps({"mode": "apply" if args.apply else "dry-run", "policy": asdict(policy), "counts": counts}, ensure_ascii=False))
else:
result = audit_catalog(session)
print(json.dumps(result, ensure_ascii=False))
return 1 if result["failures"] else 0
return 0