From feeac087422f4b1dd4ab8f7a1e92fdee719938c2 Mon Sep 17 00:00:00 2001 From: Joel Davies Date: Tue, 26 Nov 2024 15:21:31 +0000 Subject: [PATCH] Update README instructions and set migration state in dev_cli db-generate #425 --- README.md | 52 +++++++++++++++--- data/mock_data.dump | Bin 178540 -> 179054 bytes .../migrations/script.py | 26 +++++++-- scripts/dev_cli.py | 4 ++ 4 files changed, 68 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 6cff0efb..221a8529 100644 --- a/README.md +++ b/README.md @@ -329,30 +329,64 @@ a microservice that provides user authentication against an LDAP server and retu ### Migrations -Migration scripts are located inside the `inventory_management_system/migrations/scripts`. See the -`example_migration.py` for an example on how to implement one. Any new migrations added should be automatically picked -up and shown via +#### Adding a migration + +To add a migration first use + +```bash +ims-migrate create +``` + +to create a new one inside the `inventory_management_system/migrations/scripts` directory. Then add the code necessary +to perform the migration. See `_example_migration.py` for an example on how to implement one. + +#### Performing forward migrations + +Before performing a you can first check the current status of the database and any outstanding migrations using ```bash -ims-migrate list +ims-migrate status ``` -or +or in Docker ```bash docker exec -it inventory_management_system_api_container ims-migrate list ``` -if running in Docker. +Then to perform all outstanding migrations up to the latest one use + +```bash +ims-migrate forward latest +``` -To perform a migration you should use +You may also specify a specific migration name to apply instead which will apply all migrations between the current +applied one and the specified one. A prompt will be shown to ensure the migrations being applied are sensible. + +#### Performing backward migrations + +To revert the database by performing backwards migrations you can first use ```bash -ims-migrate forward +ims-migrate status ``` -To revert the same migration use +to check the current status of the database and available migrations and then use ```bash ims-migrate backward ``` + +to perform all backward migrations to get from the current database state back to the state prior to the chosen +migration name (i.e. it also performs the backward migration for the given migration name). + +#### Forcing migration state + +If for some reason the migration state is different to what you expect it may be forced via + +```bash +ims-migrate set +``` + +This is already set to `latest` automatically when using the `dev_cli` to regenerate mock data so that the dump retains +the expected state. diff --git a/data/mock_data.dump b/data/mock_data.dump index a3cacd1cd6653aa2630784124083a30a0d5984ff..8734ca82ba6a97751dc4321b3ac13025902383fc 100644 GIT binary patch literal 179054 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 Zf0JBpd1GySeDmW2cT^sD*I&eA{vX)R67&E7 literal 178540 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 diff --git a/inventory_management_system_api/migrations/script.py b/inventory_management_system_api/migrations/script.py index 20c8f8f2..bced569d 100644 --- a/inventory_management_system_api/migrations/script.py +++ b/inventory_management_system_api/migrations/script.py @@ -5,6 +5,7 @@ import logging import sys from abc import ABC, abstractmethod +from typing import Optional from inventory_management_system_api.core.database import get_database from inventory_management_system_api.migrations.core import ( @@ -23,17 +24,30 @@ database = get_database() -def check_user_sure() -> bool: +def check_user_sure(message: Optional[str] = None, skip: bool = False) -> bool: """ Asks user if they are sure action should proceed and exits if not. + :param message: Message to accompany the check. + :param skip: Whether to skip printing out the message and performing the check. :return: Whether user is sure. """ + if skip: + return True + + print(message) + print() answer = input("Are you sure you wish to proceed? ") return answer in ("y", "yes") +def add_skip_args(parser: argparse.ArgumentParser): + """Adds common arguments for skipping user prompts.""" + + parser.add_argument("--yes", "-y", help="Specify to skip all are you sure prompts", action="store_true") + + class SubCommand(ABC): """Base class for a sub command.""" @@ -198,6 +212,8 @@ def __init__(self): def setup(self, parser: argparse.ArgumentParser): parser.add_argument("name", help="Name of the last migration the database currently matches.") + add_skip_args(parser) + def run(self, args: argparse.Namespace): available_migrations = find_available_migrations() @@ -206,10 +222,10 @@ def run(self, args: argparse.Namespace): except ValueError: sys.exit(f"Migration '{args.name}' was not found in the available list of migrations") - print(f"This operation will forcibly set the latest migration to '{available_migrations[end_index]}'") - print() - - if check_user_sure(): + if check_user_sure( + message=f"This operation will forcibly set the latest migration to '{available_migrations[end_index]}'", + skip=args.yes, + ): set_previous_migration(available_migrations[end_index]) diff --git a/scripts/dev_cli.py b/scripts/dev_cli.py index 5d803fe9..11d95021 100644 --- a/scripts/dev_cli.py +++ b/scripts/dev_cli.py @@ -234,6 +234,10 @@ def run(self, args: argparse.Namespace): generate_mock_data() except ImportError: logging.error("Failed to find generate_mock_data.py") + + logging.info("Ensuring previous migration is set to latest...") + run_command(["ims-migrate", "set", "latest", "-y"]) + if args.dump: logging.info("Dumping output...") # Dump output again