reddit/app/delete_posts.py

40 lines
1.5 KiB
Python

import config
import os
import time
import sqlite3
import subprocess
if __name__ == "__main__":
connection = sqlite3.connect(config.db_file)
cursor = connection.cursor()
now = int(time.time())
max_created_utc = now - config.max_age_seconds
select = "SELECT count(*) FROM post WHERE created_utc < ?"
binds = [max_created_utc]
results = cursor.execute(select, binds)
print("Deleting old posts")
delete = "DELETE FROM post WHERE created_utc < ?"
cursor.execute(delete, binds)
print("Deleting old media db rows")
delete = "DELETE FROM media WHERE permalink NOT IN (SELECT permalink FROM post)"
cursor.execute(delete)
all_files_local = subprocess.run(["find", "/reddit/media", "-type", "f"], capture_output=True, text=True)
all_files_local = set(all_files_local.stdout.splitlines())
select = "SELECT local from media"
results = cursor.execute(select).fetchall()
connection.commit()
connection.close()
all_files_db = set([row[0] for row in results])
extra_files = all_files_local - all_files_db
print("Deleting old files")
for file in extra_files:
print(f"Removing {file}")
os.remove(file)
empty_dirs = subprocess.run(["find", "/reddit/media", "-type", "d", "-empty"], capture_output=True, text=True)
empty_dirs = set(empty_dirs.stdout.splitlines())
print("Deleting empty directories")
for dir in empty_dirs:
print(f"Removind dir {dir}")
os.rmdir(dir)
print("Done")