mirror of
https://github.com/chatmail/relay.git
synced 2026-05-10 16:04:37 +00:00
chunked deletion
This commit is contained in:
@@ -11,18 +11,19 @@ from .database import Database
|
|||||||
from .doveauth import iter_userdb_lastlogin_before
|
from .doveauth import iter_userdb_lastlogin_before
|
||||||
|
|
||||||
|
|
||||||
def remove_user(db, config, user):
|
def delete_inactive_users(db, config, CHUNK=100):
|
||||||
user_mail_dir = config.get_user_maildir(user)
|
|
||||||
shutil.rmtree(user_mail_dir, ignore_errors=True)
|
|
||||||
with db.write_transaction() as conn:
|
|
||||||
conn.execute("DELETE FROM users WHERE addr = ?", (user,))
|
|
||||||
|
|
||||||
|
|
||||||
def delete_inactive_users(db, config):
|
|
||||||
cutoff_date = time.time() - config.delete_inactive_users_after * 86400
|
cutoff_date = time.time() - config.delete_inactive_users_after * 86400
|
||||||
for user in iter_userdb_lastlogin_before(db, cutoff_date):
|
|
||||||
remove_user(db, config, user)
|
old_users = iter_userdb_lastlogin_before(db, cutoff_date)
|
||||||
print(f"Deleted user: {user}")
|
chunks = (old_users[i : i + CHUNK] for i in range(0, len(old_users), CHUNK))
|
||||||
|
for sublist in chunks:
|
||||||
|
for user in sublist:
|
||||||
|
user_mail_dir = config.get_user_maildir(user)
|
||||||
|
shutil.rmtree(user_mail_dir, ignore_errors=True)
|
||||||
|
|
||||||
|
with db.write_transaction() as conn:
|
||||||
|
for user in sublist:
|
||||||
|
conn.execute("DELETE FROM users WHERE addr = ?", (user,))
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ def test_remove_stale_users(db, example_config):
|
|||||||
|
|
||||||
# create some stale and some new accounts
|
# create some stale and some new accounts
|
||||||
to_remove = []
|
to_remove = []
|
||||||
for i in range(10):
|
for i in range(150):
|
||||||
addr = f"oldold{i:03}@chat.example.org"
|
addr = f"oldold{i:03}@chat.example.org"
|
||||||
create_user(addr, last_login=old)
|
create_user(addr, last_login=old)
|
||||||
with db.read_connection() as conn:
|
with db.read_connection() as conn:
|
||||||
|
|||||||
Reference in New Issue
Block a user