+ 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)
+
+ existing_user_ids = []
+ if users_by_email:
+ # get existing users by email
+ existing_users = self.api.plshell.GetPersons(self.api.plauth, \
+ {'email': users_by_email.keys()}, ['person_id', 'key_ids', 'email'])
+ existing_user_ids.extend([user['email'] for user in existing_users])
+
+ if users_by_site:
+ # get a list of user sites (based on requeste user urns
+ site_list = self.api.plshell.GetSites(self.api.plauth, 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.api.plshell.GetPersons(self.api.plauth, \
+ 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
+