diff --git a/migrations/20240327_add_created_table.py b/migrations/20240327_add_created_table.py new file mode 100644 index 0000000000000000000000000000000000000000..f9b6fa03c78d282f620383f81e413b34805b9bc1 --- /dev/null +++ b/migrations/20240327_add_created_table.py @@ -0,0 +1,50 @@ +import csv +import dataset +from datetime import datetime +import rabbit_config as rcfg + + +def upgrade(): + db_path = rcfg.db_path + db_name = "user_reg.db" + csv_filename = "./migrations/account-registration-history.csv" + + db = dataset.connect(f"sqlite:///{db_path}/{db_name}") + table = db["users"] + + # Get all username and last_update + usernames = db.query("SELECT username, last_update FROM users") + users = {} + for u in usernames: + users[u["username"]] = dict(u) + + # Get created from csv file + with open(csv_filename) as f: + reader = csv.reader(f, delimiter=",") + # Skip header + next(reader) + for row in reader: + if row[0] in users: + users[row[0]]["created"] = datetime.fromisoformat(row[1][:-3]) + users[row[0]]["origin"] = row[2] + + # Add copy created column from last_update if they are not in csv file + for username in users: + if "created" not in users[username]: + users[username]["created"] = datetime.fromisoformat( + users[username]["last_update"] + ) + users[username]["origin"] = "last_update" + # No need to update this column back to the db + del users[username]["last_update"] + + # Create new columns + table.create_column("created", db.types.datetime) + table.create_column("origin", db.types.text) + + # Update database in chunk + table.update_many(list(users.values()), ["username"], ensure=True) + + +if __name__ == "__main__": + upgrade()