From 4fd86b5914b65acfee6a6d3eb6a9bf09449ce03e Mon Sep 17 00:00:00 2001 From: Sandrine Avakian Date: Wed, 21 Dec 2011 14:57:35 +0100 Subject: [PATCH] Modification of verify_users. --- sfa/senslab/slabslices.py | 115 +++++++++++++------------------------- 1 file changed, 40 insertions(+), 75 deletions(-) diff --git a/sfa/senslab/slabslices.py b/sfa/senslab/slabslices.py index 09e1cc8f..609164f6 100644 --- a/sfa/senslab/slabslices.py +++ b/sfa/senslab/slabslices.py @@ -339,99 +339,64 @@ class SlabSlices: if 'person_id' in user and 'hrn' in user: users_by_id[user['person_id']] = user users_dict[user['person_id']] = {'person_id':user['person_id'], 'hrn':user['hrn']} - - #hrn, type = urn_to_hrn(user['urn']) - #username = get_leaf(hrn) - #login_base = get_leaf(get_authority(user['urn'])) - #user['username'] = username - #users_by_site[login_base].append(user) + users_by_hrn[user['hrn']] = user users_dict[user['hrn']] = {'person_id':user['person_id'], 'hrn':user['hrn']} - + + print>>sys.stderr, " \r\n \r\n \t slabslices.py verify_person users_dict %s \r\n user_by_hrn %s \r\n \tusers_by_id %s " %( users_dict,users_by_hrn, users_by_id) + existing_user_ids = [] + existing_user_hrns = [] existing_users= [] + #Check if user is in LDAP using its hrn. + #Assuming Senslab is centralised : one LDAP for all sites, user_id unknown from LDAP + # LDAP does not provide users id, therfore we rely on hrns if users_by_hrn: - # get existing users by email - existing_users = self.driver.GetPersons({'hrn': users_by_hrn.keys()}, - ['hrn']) - #print>>sys.stderr, " \r\n \r\n \t slices.py HEEEEEEEEY===========verify_person existing_users %s users_dict %s user_by_id %s " %(existing_users, users_dict,users_by_id) - #existing_user_ids = [(users_dict[user['hrn']]['hrn'],users_dict[user['hrn']]['person_id'] ) for user in existing_users] - for user in existing_users : - for k in users_dict[user['hrn']] : - existing_user_ids.append (users_dict[user['hrn']][k]) - - print>>sys.stderr, " \r\n \r\n slices.py verify_person existing_user_ids %s " %(existing_user_ids) - #if users_by_id: - #existing_user_ids.extend([user for user in users_by_id]) - #if users_by_site: - ## get a list of user sites (based on requeste user urns - #site_list = self.driver.GetSites(users_by_site.keys(), \ - #['site_id', 'login_base', 'person_ids']) - #sites = {} - #site_user_ids = [] - - ## get all existing users at these sites - #for site in site_list: - #sites[site['site_id']] = site - #site_user_ids.extend(site['person_ids']) - - #existing_site_persons_list = self.driver.GetPersons(site_user_ids, - #['person_id', 'key_ids', 'email', 'site_ids']) - - ## all requested users are either existing users or new (added) users - #for login_base in users_by_site: - #requested_site_users = users_by_site[login_base] - #for requested_user in requested_site_users: - #user_found = False - #for existing_user in existing_site_persons_list: - #for site_id in existing_user['site_ids']: - #site = sites[site_id] - #if login_base == site['login_base'] and \ - #existing_user['email'].startswith(requested_user['username']): - #existing_user_ids.append(existing_user['email']) - #users_dict[existing_user['email']] = requested_user - #user_found = True - #break - #if user_found: - #break - - #if user_found == False: - #fake_email = requested_user['username'] + '@geni.net' - #users_dict[fake_email] = requested_user - + ['hrn','pkey']) + if existing_users: + for user in existing_users : + #for k in users_dict[user['hrn']] : + existing_user_hrns.append (users_dict[user['hrn']]['hrn']) + existing_user_ids.append (users_dict[user['hrn']]['person_id']) + print>>sys.stderr, " \r\n \r\n \t slabslices.py verify_person existing_user_ids.append (users_dict[user['hrn']][k]) %s \r\n existing_users %s " %( existing_user_ids,existing_users) + # requested slice users - requested_user_ids = users_dict.keys() + requested_user_ids = users_by_id.keys() + requested_user_hrns = users_by_hrn.keys() + print>>sys.stderr, " \r\n \r\n \t slabslices.py verify_person requested_user_ids %s user_by_hrn %s " %( requested_user_ids,users_by_hrn) # existing slice users existing_slice_users_filter = {'hrn': slice_record.get('PI', [])} - print>>sys.stderr, " \r\n \r\n slices.py verify_person requested_user_ids %s existing_slice_users_filter %s slice_record %s" %(requested_user_ids,existing_slice_users_filter,slice_record) + #print>>sys.stderr, " \r\n \r\n slices.py verify_person requested_user_ids %s existing_slice_users_filter %s slice_record %s" %(requested_user_ids,existing_slice_users_filter,slice_record) - existing_slice_users = self.driver.GetPersons(existing_slice_users_filter,['hrn']) + existing_slice_users = self.driver.GetPersons(existing_slice_users_filter,['hrn','pkey']) print>>sys.stderr, " \r\n \r\n slices.py verify_person existing_slice_users %s " %(existing_slice_users) - existing_slice_user_ids = [] - for user in existing_slice_users : - for k in users_dict[user['hrn']] : - existing_slice_user_ids.append (users_dict[user['hrn']][k]) - #existing_slice_user_ids = [user['hrn'] for user in existing_slice_users] - - #print>>sys.stderr, " \r\n \r\n slices.py verify_person requested_user_ids %s existing_slice_user_ids%s " %(requested_user_ids,existing_slice_user_ids) + + existing_slice_user_hrns = [user['hrn'] for user in existing_slice_users] + + print>>sys.stderr, " \r\n \r\n slices.py verify_person requested_user_ids %s existing_slice_user_hrns %s " %(requested_user_ids,existing_slice_user_hrns) # users to be added, removed or updated - added_user_ids = set(requested_user_ids).difference(set(existing_user_ids)) - added_slice_user_ids = set(requested_user_ids).difference(existing_slice_user_ids) - removed_user_ids = set(existing_slice_user_ids).difference(requested_user_ids) - #print>>sys.stderr, " \r\n \r\n slices.py verify_persons existing_slice_user_ids %s requested_user_ids %s " %(existing_slice_user_ids,requested_user_ids) - updated_user_ids = set(existing_slice_user_ids).intersection(requested_user_ids) + + added_user_hrns = set(requested_user_hrns).difference(set(existing_user_hrns)) + + added_slice_user_hrns = set(requested_user_hrns).difference(existing_slice_user_hrns) + + removed_user_hrns = set(existing_slice_user_hrns).difference(requested_user_hrns) + + + updated_user_hrns = set(existing_slice_user_hrns).intersection(requested_user_hrns) #print>>sys.stderr, " \r\n \r\n slices.py verify_persons added_user_ids %s added_slice_user_ids %s " %(added_user_ids,added_slice_user_ids) - #print>>sys.stderr, " \r\n \r\n slices.py verify_persons removed_user_ids %s updated_user_ids %s " %(removed_user_ids,updated_user_ids) + print>>sys.stderr, " \r\n \r\n slices.py verify_persons removed_user_hrns %s updated_user_hrns %s " %(removed_user_hrns,updated_user_hrns) # Remove stale users (only if we are not appending) append = options.get('append', True) if append == False: - for removed_user_id in removed_user_ids: - self.driver.DeletePersonFromSlice(removed_user_id, slice_record['name']) + for removed_user_hrn in removed_user_hrns: + self.driver.DeletePersonFromSlice(removed_user_hrn, slice_record['name']) # update_existing users updated_users_list = [user for user in existing_slice_users if user['hrn'] in \ - updated_user_ids] + updated_user_hrns] + print>>sys.stderr, " \r\n \r\n slices.py verify_persons removed_user_hrns %s updated_users_list %s " %(removed_user_hrns,updated_users_list) #self.verify_keys(existing_slice_users, updated_users_list, peer, append) added_persons = [] @@ -480,7 +445,7 @@ class SlabSlices: return added_persons - def verify_keys(self, persons, users, peer, append=True): + def verify_keys(self, persons, users, peer, options={}): # existing keys key_ids = [] for person in persons: -- 2.43.0