Last active
October 21, 2020 14:47
-
-
Save t-book/6cef3965bd404db802138bd6ad6dfa2f to your computer and use it in GitHub Desktop.
transfer_user_data.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django.core.management.base import BaseCommand, CommandError | |
from geonode.layers.models import UploadSession | |
from geonode.people.models import Profile | |
from geonode.base.models import ResourceBase | |
from mapstore2_adapter.api.models import MapStoreResource | |
from geonode.base.management.commands.helpers import confirm | |
from geonode.layers.utils import set_layers_permissions | |
class Command(BaseCommand): | |
help = 'Management command to transfer User Data ' \ | |
'from one user to the other' | |
def add_arguments(self, parser): | |
parser.add_argument( | |
'-d', | |
'--dry-run', | |
dest='dry', | |
default=False, | |
help="Provide output of what the command would perform, but without changing anything.", | |
required=False | |
) | |
parser.add_argument( | |
'-o', | |
'--old', | |
dest='old', | |
default='', | |
help="ID of Username from whom data is removed", | |
required=True) | |
parser.add_argument( | |
'-n', | |
'--new', | |
dest='new', | |
default=1015, | |
help="ID of Username of receives data", | |
required=False) | |
def handle(self, *args, **options): | |
old = options['old'] | |
new = options['new'] | |
dry = options['dry'] | |
try: | |
old_user = Profile.objects.get(id=old) | |
except: | |
self.stdout.write(self.style.ERROR('no old user with id: "%s"' % old)) | |
exit() | |
try: | |
new_user = Profile.objects.get(id=new) | |
except: | |
self.stdout.write(self.style.ERROR('no new user with id: "%s"' % new)) | |
exit() | |
msg = '\n CAUTION: You are about to transfer data from ' \ | |
'user: {} to user: {}. \n Proceed? (Y/n)'.format( | |
old_user.username, | |
new_user.username | |
) | |
# Filter resources | |
resource_objects = ResourceBase.objects.filter(owner_id=old_user.id) | |
upload_objects = UploadSession.objects.filter(user_id=old_user.id) | |
mapstore_objects = MapStoreResource.objects.filter(user_id=old_user.id) | |
if (dry is False): | |
if confirm(msg, resp=False): | |
for r in resource_objects: | |
r.owner_id = new_user.id | |
r._set_metadata_author(new_user) | |
r._set_poc(new_user) | |
r.save() | |
r.set_default_permissions() | |
self.stdout.write(self.style.SUCCESS('Updated resource: "%s"' % r.title)) | |
for us in upload_objects: | |
us.user_id = new_user.id | |
us.user = new_user | |
us.save() | |
self.stdout.write(self.style.SUCCESS('Updated UploadSession: "%s"' % us.id)) | |
for m in mapstore_objects: | |
m.user_id = new_user.id | |
m.save() | |
self.stdout.write(self.style.SUCCESS('Updated MapStoreResource: "%s"' % m.name)) | |
else: | |
for r in resource_objects: | |
self.stdout.write(self.style.SUCCESS('Will update resource: "%s"' % r.title)) | |
for us in upload_objects: | |
self.stdout.write(self.style.SUCCESS('Will update UploadSession: "%s"' % us.id)) | |
for m in mapstore_objects: | |
self.stdout.write(self.style.SUCCESS('Will update MapStoreResource: "%s"' % m.name)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment