123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- """
- Provides functions to manage the database while the server is offline.
- """
- import argparse
- import csv
- import os
- from piket_server.models import Person, Settlement, ConsumptionType, Consumption
- from piket_server.flask import db
- def main():
- """ Main entry point. """
- parser = argparse.ArgumentParser()
- subparsers = parser.add_subparsers()
- # Clear command
- parser_clear = subparsers.add_parser("clear", help="Clear the database.")
- parser_clear.set_defaults(func=cmd_clear)
- parser_clear.add_argument("--removemydata", action="store_true")
- # Parser load_seeds
- parser_load_persons = subparsers.add_parser(
- "load_persons", help="Load Person data."
- )
- parser_load_persons.set_defaults(func=cmd_load_persons)
- parser_load_persons.add_argument("datafile")
- args = parser.parse_args()
- args.func(args)
- def cmd_clear(args) -> None:
- """ Entry point for 'clear' subcommand. """
- if not args.removemydata:
- print("WARNING! This command will delete all contents in your database!")
- print("Type 'removemydata' to continue, anything else or CTRL-C to abort.")
- confirmation = input("> ")
- do_wipe = confirmation == "removemydata"
- else:
- do_wipe = True
- if do_wipe:
- print("Dropping all tables...")
- db.drop_all()
- print("All data removed. Recreating database...")
- db.create_all()
- from alembic.config import Config # type: ignore
- from alembic import command # type: ignore
- alembic_cfg = Config(os.path.join(os.path.dirname(__file__), "alembic.ini"))
- command.stamp(alembic_cfg, "head")
- print("Done.")
- return
- print("Aborting.")
- def cmd_load_persons(args) -> None:
- """ Entrypoint for 'load_persons" subcommand. """
- print("Loading persons.")
- with open(args.datafile) as csvfile:
- reader = csv.DictReader(csvfile)
- for row in reader:
- p = Person(name=row["name"], active=bool(int(row["active"])))
- db.session.add(p)
- db.session.commit()
- print("Done.")
- if __name__ == "__main__":
- main()
|