Skip to content

Instantly share code, notes, and snippets.

@t-book
Last active October 21, 2020 14:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save t-book/6cef3965bd404db802138bd6ad6dfa2f to your computer and use it in GitHub Desktop.
Save t-book/6cef3965bd404db802138bd6ad6dfa2f to your computer and use it in GitHub Desktop.
transfer_user_data.py
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