diff --git a/src/python/dm/aps_user_db/cli/updateUsersFromApsDbCli.py b/src/python/dm/aps_user_db/cli/updateUsersFromApsDbCli.py index 7b99e8c3c58c932faa1719d3fed27140dd03bd67..8b13a52746dfa7de0ebd198fe15ab70b1bdda38f 100755 --- a/src/python/dm/aps_user_db/cli/updateUsersFromApsDbCli.py +++ b/src/python/dm/aps_user_db/cli/updateUsersFromApsDbCli.py @@ -1,5 +1,6 @@ #!/usr/bin/env python +import datetime from dm.common.exceptions.invalidRequest import InvalidRequest from dm.common.cli.dmCli import DmCli from dm.common.utility.configurationManager import ConfigurationManager @@ -19,13 +20,14 @@ Description: Updates all users in DM LDAP and database using information from APS DB. """) ConfigurationManager.getInstance().setConfigFile('/home/oxygen/SVESELI/Work/DM/etc/dm.conf') - print ConfigurationManager.getInstance().getConfigOption('DsRestApiFactory', 'username') + self.logger.debug('Starting sync process') apsUserDbApi = ApsUserDbApi() userRestApi = DsRestApiFactory.getUserRestApi() - + self.logger.debug('Retrieving APS users') apsUsers = apsUserDbApi.getApsUsers() self.logger.debug('Number of APS Users: %s' % len(apsUsers)) + self.logger.debug('Retrieving DM users') dmUsers = userRestApi.getUsers() self.logger.debug('Number of DM Users: %s' % len(dmUsers)) dmUserBadgeMap = {} @@ -60,15 +62,25 @@ Description: nCreatedUsers += 1 else: dmLastUpdate = dmUser.get('lastUpdate') + if dmLastUpdate: + # need to convert DM last update time to datetime object + # datetime cannot handle time zone at the moment + timeZonePos = dmLastUpdate.rfind('-') + dmLastUpdate = dmLastUpdate[0:timeZonePos] + dmLastUpdate = datetime.datetime.strptime(dmLastUpdate, '%Y-%m-%d %H:%M:%S') if not dmLastUpdate or dmLastUpdate < apsLastChangeDate: id = dmUser.get('id') self.logger.debug('Modifying user with badge %s: %s (DM id: %s)' % (badge, apsUser['name'], id)) + print apsUser userRestApi.updateUser(id, username, firstName, lastName, middleName, email, badge, globusUsername, description, password, isLocalUser, lastUpdate) nUpdatedUsers += 1 else: # User is up to date pass + self.logger.debug('Number of new DM users: %s' % (nCreatedUsers)) + self.logger.debug('Number of updated DM users: %s' % (nUpdatedUsers)) + self.logger.debug('Completed sync process') #ldapUserManager = LdapUserManager('ldaps://dmid-vm.xray.aps.anl.gov:636', 'uid=dmadmin,ou=People,o=aps.anl.gov,dc=aps,dc=anl,dc=gov', '/tmp/ldapPassword', userDnFormat='uid=%s,ou=DM,ou=People,o=aps.anl.gov,dc=aps,dc=anl,dc=gov', groupDnFormat='cn=%s,ou=DM,ou=Group,o=aps.anl.gov,dc=aps,dc=anl,dc=gov', minGidNumber=66000) #ldapUser = ldapUserManager.getUserInfo(username) diff --git a/src/python/dm/ds_web_service/api/userRestApi.py b/src/python/dm/ds_web_service/api/userRestApi.py index 4a7946d94830c4195a32ba8c51617dd681af8173..31f9bf52fcdb73b3fb6315aa4378722ccc871768 100755 --- a/src/python/dm/ds_web_service/api/userRestApi.py +++ b/src/python/dm/ds_web_service/api/userRestApi.py @@ -94,12 +94,12 @@ class UserRestApi(DsRestApi): if isLocalUser: url += '&isLocaUser=%s' % isLocalUser if lastUpdate: - url += '&lastUpdate=%s' % lastUpdate + url += '&lastUpdate=%s' % Encoder.encode(str(lastUpdate)) if not url: raise InvalidRequest('No user attributes have been modified.') # Remove first '&' character url = '%s/users/%s?%s' % (self.getContextRoot(), id, url[1:]) - responseData = self.sendSessionRequest(url=url, method='POST') + responseData = self.sendSessionRequest(url=url, method='PUT') return UserInfo(responseData) @DsRestApi.execute