def setup_vdisk(self, account, password, local_folder, holder, is_weibo=False, log=True, encrypt=False, encrypt_code=None, force_stop=True): try: self.vdisk_lock.acquire() if not force_stop and self.vdisk_handler: return self.vdisk_handler if force_stop and self.vdisk_handler: self.vdisk_handler.stop() if encrypt and encrypt_code: client = CryptoVdiskClient(VDISK_APP_KEY, VDISK_APP_SECRET) client.auth(account, password, encrypt_code, 'sinat' if is_weibo else 'local') else: client = VdiskClient(VDISK_APP_KEY, VDISK_APP_SECRET) client.auth(account, password, 'sinat' if is_weibo else 'local') self.vdisk_token_refresh = VdiskRefreshToken(client) self.vdisk_token_refresh.setDaemon(True) self.vdisk_token_refresh.start() storage = VdiskStorage(client, holder_name=holder) try: handler = SyncHandler(storage, local_folder, sec=DEFAULT_SLEEP_SECS, log=log) handler.setDaemon(True) handler.start() self.vdisk_handler = handler self.save_vdisk_info(account, password, local_folder, holder, is_weibo, log, encrypt, encrypt_code) return handler except VdiskError, e: raise CloudBackupError(e.src, e.err_no, e.msg) finally: self.vdisk_lock.release()