def save(self, user, site): if not self.cleaned_data['is_hub']: place = get_or_create_root_location() group = site.create_TgGroup( group_name=self.cleaned_data['group_name'], display_name=self.cleaned_data['display_name'], group_type=self.cleaned_data['group_type'], level='member', user=user, description=self.cleaned_data['description'], permission_prototype=self.cleaned_data['permissions_set'], place=place, ) else: group = site.create_hub( location_name=self. cleaned_data['display_name'], # not location, group_name=self.cleaned_data['group_name'], display_name=self.cleaned_data['display_name'], group_type=self.cleaned_data['group_type'], level='member', user=user, description=self.cleaned_data['description'], address=self.cleaned_data['address'], permission_prototype=self.cleaned_data['permissions_set'], ) group.save() return group
def get_or_create(group_name=None, display_name=None, place=None, level=None, user=None, group_type='interest', description='', permission_prototype='public', address='') : """get or create a group """ # note : we can't use get_or_create for TgGroup, because the created date clause won't match on a different day # from the day the record was created. if not user: raise TypeError("We must have a user to create a group, since otherwise it will be inaccessible") if not place: place = get_or_create_root_location() xs = TgGroup.objects.filter(group_name=group_name) if len(xs) > 0 : group = xs[0] created = False else : created = True group = TgGroup(group_name=group_name, display_name=display_name, level=level, place=place, description=description, group_type=group_type, address=address) group.save() group_post_create(group, user, permission_prototype) return group, created
def patch_in_profiles(): """create profiles and setup security hubspace users """ site_members_group = get_all_members_group() site_members = site_members_group.users.all() users = User.objects.all() for user in users: if user not in site_members and user.username != 'anon': site_members_group.users.add(user) if not user.homeplace : user.homeplace = get_or_create_root_location() user.save() print "%s at %s" % (user.username, user.homeplace) users = User.objects.filter(profile__isnull=True) no_of_users = users.count() for user in users: print user.username create_reference(User, user) setup_user_security(user,'public') profile = user.create_Profile(user, user=user) profile.save() print `profile` print "patched %s users to have profiles" % str(no_of_users)
def save(self, user, site): if not self.cleaned_data['is_hub'] : place = get_or_create_root_location() group = site.create_TgGroup( group_name=self.cleaned_data['group_name'], display_name=self.cleaned_data['display_name'], group_type = self.cleaned_data['group_type'], level = 'member', user = user, description = self.cleaned_data['description'], permission_prototype = self.cleaned_data['permissions_set'], place = place, ) else : group = site.create_hub( location_name = self.cleaned_data['display_name'], # not location, group_name=self.cleaned_data['group_name'], display_name=self.cleaned_data['display_name'], group_type = self.cleaned_data['group_type'], level = 'member', user = user, description = self.cleaned_data['description'], address = self.cleaned_data['address'], permission_prototype = self.cleaned_data['permissions_set'], ) group.save() return group
def on_user_change(request, data): print "in on_user_changed" u = User.objects.plus_get(request.user, id=data['id']) if not u.homehub or u.homehub.place != u.homeplace: from apps.plus_permissions.default_agents import get_or_create_root_location, get_all_members_group if u.homeplace == get_or_create_root_location(): u.homehub = get_all_members_group() else: u.homehub = TgGroup.objects.get(place=u.homeplace, level='member') u.save() u.post_save() print "user %s was changed by an external application" % u.username
def on_user_change(request, data) : print "in on_user_changed" u = User.objects.plus_get(request.user, id=data['id']) if not u.homehub or u.homehub.place != u.homeplace : from apps.plus_permissions.default_agents import get_or_create_root_location, get_all_members_group if u.homeplace == get_or_create_root_location() : u.homehub = get_all_members_group() else : u.homehub = TgGroup.objects.get(place=u.homeplace,level='member') u.save() u.post_save() print "user %s was changed by an external application" % u.username
def save(self, user, site): if not self.cleaned_data['is_hub'] : place = get_or_create_root_location() else : place,created = Location.objects.get_or_create(name=self.cleaned_data['location']) group = site.create_TgGroup( group_name=self.cleaned_data['group_name'], display_name=self.cleaned_data['display_name'], group_type = self.cleaned_data['group_type'], level = 'member', user = user, description = self.cleaned_data['description'], permission_prototype = self.cleaned_data['permissions_set'], place = place, ) group.save() return group
def get_or_create(group_name=None, display_name=None, place=None, level=None, user=None, group_type='interest', description='', permission_prototype='public') : """get or create a group """ # note : we can't use get_or_create for TgGroup, because the created date clause won't match on a different day # from the day the record was created. if not user: raise TypeError("We must have a user to create a group, since otherwise it will be inaccessible") if not place: place = get_or_create_root_location() xs = TgGroup.objects.filter(group_name=group_name) if len(xs) > 0 : group = xs[0] created = False else : created = True group = TgGroup(group_name=group_name, display_name=display_name, level=level, place=place, description=description, group_type=group_type) group.save() if level == 'member': admin_group, created = TgGroup.objects.get_or_create( group_name=group_name + "_hosts", display_name=display_name + " Hosts", level='host', place=place, user=user, description="Admin Group for %s" % display_name, ) setup_group_security(group, group, admin_group, user, permission_prototype) elif level == 'host': setup_group_security(group, group, group, user, 'private') if group.group_name != "all_members_hosts" : group.add_member(get_all_members_group().get_admin_group()) return group, created
def get_or_create(group_name=None, display_name=None, place=None, level=None, user=None, group_type='interest', description='', permission_prototype='public', address=''): """get or create a group """ # note : we can't use get_or_create for TgGroup, because the created date clause won't match on a different day # from the day the record was created. if not user: raise TypeError( "We must have a user to create a group, since otherwise it will be inaccessible" ) if not place: place = get_or_create_root_location() xs = TgGroup.objects.filter(group_name=group_name) if len(xs) > 0: group = xs[0] created = False else: created = True group = TgGroup(group_name=group_name, display_name=display_name, level=level, place=place, description=description, group_type=group_type, address=address) group.save() group_post_create(group, user, permission_prototype) return group, created
user = User.objects.get(username=username) except : user = User.objects.get(email_address=email) user.set_password('password') if description : user.description = description elif biography : user.description = biography if not user.homeplace : if location : p,flag = Location.objects.get_or_create(name=location) user.homeplace = p else : user.homeplace = get_or_create_root_location() if " " in fullname : first, last = fullname.rsplit(' ',1) elif "." in fullname : first, last = fullname.rsplit('.',1) else : first = fullname last = '' user.first_name = first[:30] user.last_name = last[:30] user.psn_id = psn_id user.save()
from apps.profiles.models import Profile from apps.plus_permissions.default_agents import get_or_create_root_location, get_virtual_members_group rootloc = get_or_create_root_location() virtual_members = get_virtual_members_group() for p in Profile.objects.all() : print p.user.username, p.first_name.encode('utf-8'), p.last_name.encode('utf-8'), p.homehub, if p.homeplace : print p.homeplace.name else : print if not p.homehub : if p.homeplace != rootloc: # we can't currently infer from, say, Nepal to Asia print "not virtual ... " else : print "virtual " virtual_members.add_member(p.user) p.homehub = virtual_members p.save() p.user.save()
from django.contrib.auth.models import User from apps.plus_permissions.default_agents import get_all_members_group, get_virtual_members_group, get_or_create_root_location default_home = get_all_members_group() default_home.location = get_or_create_root_location() virtual_group = get_virtual_members_group() def patch_home_hubs(): for u in User.objects.all(): if (not u.homehub) or (u.homehub == virtual_group): u.homehub = default_home default_home.join(u) if not u.homeplace: u.homeplace = u.homehub.location print u.username, u.homeplace.name, u.homehub u.save() patch_home_hubs()
from django.contrib.auth.models import User from apps.plus_permissions.default_agents import get_all_members_group, get_virtual_members_group, get_or_create_root_location default_home = get_all_members_group() default_home.location = get_or_create_root_location() virtual_group = get_virtual_members_group() def patch_home_hubs() : for u in User.objects.all() : if (not u.homehub) or (u.homehub == virtual_group): u.homehub = default_home default_home.join(u) if not u.homeplace : u.homeplace = u.homehub.location print u.username, u.homeplace.name, u.homehub u.save() patch_home_hubs()
def patch_in_profiles(): """create profiles and setup security hubspace users """ site_members_group = get_all_members_group() all_members_hosts = site_members_group.get_admin_group() site_members = site_members_group.users.all() root_location = get_or_create_root_location() def patch_user(user): print "%s at %s" % (user.username, user.homeplace) if user not in site_members and user.username != 'anon': site_members_group.users.add(user) if user.homeplace: user.homehub = user.homeplace.tggroup_set.get(level='member') else: user.homeplace = root_location user.homehub = site_members_group user.save() create_reference(User, user) if user.active: if user.public_field: setup_user_security(user,'public') else: setup_user_security(user,'members_only') else: setup_user_security(user,'inactive') # inactive users should NOT be public... if user.public_field: user.public_field = 0 user.save() if not user.hostinfo_set.count(): hi = user.create_HostInfo(user, user=user) hi.save() if not user.public_field: user.public_field = 0 # its sometimes NULL atm user.save() profile = user.create_Profile(user, user=user) profile.save() users = User.objects.all().order_by('id') cnt = User.objects.count() batch_size = 50 start = 0 end = 50 all = set([]) def process_user_slice(users): for user in users: patch_user(user) from threading import Thread while True: # memory wasn't getting released in the loop...no idea why, so I decided to batch it in 100 user threads which we wait to rejoin before processing another batch...appears to work in keeping mem usage down t = Thread(target=process_user_slice, args=[users[start:end]]) t.start() t.join() if end == cnt: break start = end end = min(end + batch_size, cnt) print "patched %s users to have profiles" % str(users.count())
# run from django manage as in # python manage.py execfile psn_import/group.py import pickle from apps.plus_groups.models import TgGroup, Location from apps.plus_lib.utils import make_name from apps.plus_permissions.default_agents import get_admin_user, get_site, get_or_create_root_location root = get_or_create_root_location() def import_group(f_name, group_type, fn_place) : groups = pickle.load(open(f_name)) admin = get_admin_user() site = get_site(admin) for g in groups: print g.keys() #print g['groupname'], g['body'], g['description'],g['joinpolicy'] if g['joinpolicy']== 'open' : permission_prototype='public' else : permission_prototype='private' description = "" if g['description'] : description = description + g['description'] if g['body'] : description = description + g['body'] if description == "" : description = 'About this group' group_name = make_name(g['groupname'])
def group_place(dict) : return get_or_create_root_location()
def import_user(u): print u['uid'], u['username'] username = u['username'] description = u['description'] roles = u['roles'] fullname = u['fullname'].strip() biography = u['biography'] email = u['email'] portrait = u['portraitfile'].split('/')[-1] psn_id = u['uid'] location = u['location'] if not user_exists(username, email): user = create_user(username, email_address=email, password='******') else: user = User.objects.get(username=username) user.set_password('password') if description: user.description = description elif biography: user.description = biography if not user.homeplace: if location: p, flag = Location.objects.get_or_create(name=location) user.homeplace = p else: user.homeplace = get_or_create_root_location() if " " in fullname: first, last = fullname.rsplit(' ', 1) elif "." in fullname: first, last = fullname.rsplit('.', 1) else: first = fullname last = '' user.first_name = first[:30] user.last_name = last[:30] user.psn_id = psn_id c = 1 email2 = email while (email_exists(email2)): print email2 email2 = '%s%s' % (c, email) c = c + 1 user.email = email2 user.save() f = ImageFile(open('mhpss_export/user_images/%s' % portrait), 'rb') if f.size == 1357: return # image is plone default ... we don't want it path = avatar_file_path(target=user, filename=portrait) avatar = Avatar( target=user.get_ref(), primary=True, avatar=path, ) avatar.save() new_file = avatar.avatar.storage.save(path, f) avatar.save()
def import_user(u): print u['uid'], u['username'] username = u['username'] description = u['description'] roles = u['roles'] fullname = u['fullname'].strip() biography = u['biography'] email = u['email'] portrait = u['portraitfile'].split('/')[-1] psn_id = u['uid'] location = u['location'] if not user_exists(username, email): user = create_user(username, email_address=email, password='******') else: user = User.objects.get(username=username) user.set_password('password') if description : user.description = description elif biography : user.description = biography if not user.homeplace : if location : p,flag = Location.objects.get_or_create(name=location) user.homeplace = p else : user.homeplace = get_or_create_root_location() if " " in fullname : first, last = fullname.rsplit(' ',1) elif "." in fullname : first, last = fullname.rsplit('.',1) else : first = fullname last = '' user.first_name = first[:30] user.last_name = last[:30] user.psn_id = psn_id c = 1 email2 = email while (email_exists(email2)) : print email2 email2 = '%s%s'%(c,email) c=c+1 user.email = email2 user.save() f = ImageFile(open('mhpss_export/user_images/%s'%portrait),'rb') if f.size == 1357 : return # image is plone default ... we don't want it path = avatar_file_path(target=user, filename=portrait) avatar = Avatar( target = user.get_ref(), primary = True, avatar = path, ) avatar.save() new_file = avatar.avatar.storage.save(path, f) avatar.save()