37 lines
1.3 KiB
Python
37 lines
1.3 KiB
Python
from django.core.management.base import BaseCommand
|
||
|
||
|
||
class MergeCommand(BaseCommand):
|
||
"""base class for merge commands"""
|
||
|
||
def add_arguments(self, parser):
|
||
"""add the arguments for this command"""
|
||
parser.add_argument("--canonical", type=int, required=True)
|
||
parser.add_argument("--other", type=int, required=True)
|
||
parser.add_argument(
|
||
"--dry_run",
|
||
action="store_true",
|
||
help="don't actually merge, only print what would happen",
|
||
)
|
||
|
||
# pylint: disable=no-self-use,unused-argument
|
||
def handle(self, *args, **options):
|
||
"""merge the two objects"""
|
||
model = self.MODEL
|
||
|
||
try:
|
||
canonical = model.objects.get(id=options["canonical"])
|
||
except model.DoesNotExist:
|
||
print("canonical book doesn’t exist!")
|
||
return
|
||
try:
|
||
other = model.objects.get(id=options["other"])
|
||
except model.DoesNotExist:
|
||
print("other book doesn’t exist!")
|
||
return
|
||
|
||
absorbed_fields = other.merge_into(canonical, dry_run=options["dry_run"])
|
||
|
||
action = "would be" if options["dry_run"] else "has been"
|
||
print(f"{other.remote_id} {action} merged into {canonical.remote_id}")
|
||
print(f"absorbed fields: {absorbed_fields}")
|