def purge_temp_accounts(self, gid): # remove all accounts links_t = self.rc.smembers(S1.links_temp_key(gid)) links = links_t.difference(self.rc.smembers(S1.links_key(gid))) for link in links: # second check for usage in another account if self.rc.hexists(S1.destination_key_fmt('parents:dst'), link): continue self.rc.hdel(link, S1.ACCOUNT_KEY) self.rc.delete(S1.links_temp_key(gid))
def forget_source(self, master_gid, gid): """ Removes source gid, unlinks all bindings associated with the source @param master_gid: master gid @param gid: source gid @return: """ self.logger.info('Removing source [{0}:{1}]...'.format( master_gid, gid)) destinations = self.get_destinations(gid) for destination in destinations: users = self.get_destination_users(gid, destination) for user in users: # source gid can be bound to destination that does not belong to this master gid # forget_destination will only remove bindings that belong to this master gid DataApi.forget_destination(self, self.logger, gid, destination, user) # remove the gid from the list of child accounts self.remove_linked_account(master_gid, gid) # clear gid data if no destinations left destinations = self.get_destinations(gid) if not destinations: self.logger.info( 'Source [{0}:{1}] is orphaned, cleaning...'.format( master_gid, gid)) # remove user keys self.rc.delete(S1.gid_key(gid)) self.rc.delete(S1.gid_log_key(gid)) self.rc.delete(S1.links_key(gid)) self.rc.delete(S1.cache_key(gid)) self.del_destination_param(gid, 'cache', '', S1.cache_shorten_urls()) # clear chache and remove gid from poller list self.remove_from_poller(gid) # remove tnc self.rc.hdel(S1.TERMS_OK_KEY, gid)
def is_linked_account(self, gid, provider, user): return self.rc.sismember(S1.links_key(gid), S1.provider_root_key(provider, user))
def get_linked_accounts(self, gid, temp=False): links = self.rc.smembers( S1.links_key(gid) if not temp else S1.links_temp_key(gid)) result = {link: self.rc.hget(link, S1.ACCOUNT_KEY) for link in links} return result
def link_provider_account(self, gid, provider, user, data=None): self.rc.sadd(S1.links_key(gid), S1.provider_root_key(provider, user)) if data: self.rc.hset(S1.provider_root_key(provider, user), S1.ACCOUNT_KEY, data)
def unlink_provider_account(self, gid, provider, user): self.rc.srem(S1.links_key(gid), S1.provider_root_key(provider, user))
def purge_linked_provider_accounts(self, gid, provider): keys = self.rc.smembers(S1.links_key(gid)) to_purge = [k for k in keys if k.split(':')[0] == provider] if to_purge: self.rc.srem(S1.links_key(gid), *to_purge)