コード例 #1
0
ファイル: environment.py プロジェクト: zz198808/CloudBackup
    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()
コード例 #2
0
ファイル: environment.py プロジェクト: 520github/CloudBackup
 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()
コード例 #3
0
ファイル: environment.py プロジェクト: zz198808/CloudBackup
class Environment(object):
    instance = None

    vdisk_handler = None
    vdisk_lock = threading.Lock()
    vdisk_token_refresh = None

    s3_handler = None
    s3_lock = threading.Lock()

    gs_handler = None
    gs_lock = threading.Lock()

    def __new__(cls, *args, **kwargs):
        if not cls.instance:
            cls.instance = super(Environment,
                                 cls).__new__(cls, *args, **kwargs)
        return cls.instance

    def _get_iv(self, astr):
        if len(astr) >= 8:
            iv = astr[:8]
        else:
            iv = astr + '*' * (8 - len(astr))
        return iv

    def _get_encrypt(self, iv):
        des = DES(iv)
        return des.encrypt

    def _get_decrypt(self, iv):
        des = DES(iv)
        return des.decrypt

    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()

    def stop_vdisk(self, clear_info=True):
        try:
            self.vdisk_lock.acquire()

            if self.vdisk_handler is None:
                return

            self.vdisk_handler.stop()
            self.vdisk_handler = None
            self.vdisk_token_refresh.stop()
            self.vdisk_token_refresh = None

            if clear_info:
                self.remove_vdisk_info()
        finally:
            self.vdisk_lock.release()

    def save_vdisk_info(self,
                        account,
                        password,
                        local_folder,
                        holder,
                        is_weibo=False,
                        log=True,
                        encrypt=False,
                        encrypt_code=None):

        if self.vdisk_handler is None:
            return

        args = locals()
        del args['self']

        save_info('vdisk', args, self._get_encrypt(self._get_iv(account)),
                  'password')

    def load_vdisk_info(self):
        info = get_info('vdisk', lambda s: s)
        if info is None:
            return
        info['password'] = self._get_decrypt(self._get_iv(info['account']))(
            info.pop('password'))
        return info

    def remove_vdisk_info(self):
        save_file = get_settings_path(get_info_path(), 'vdisk')

        if os.path.exists(save_file):
            os.remove(save_file)

    def setup_s3(self,
                 access_key,
                 secret_access_key,
                 local_folder,
                 holder,
                 log=True,
                 encrypt=False,
                 encrypt_code=None,
                 force_stop=True):
        try:
            self.s3_lock.acquire()

            if self.s3_handler:
                return self.s3_handler

            if force_stop and self.s3_handler:
                self.s3_handler.stop()

            if encrypt and encrypt_code:
                client = CryptoS3Client(access_key, secret_access_key,
                                        encrypt_code)
            else:
                client = S3Client(access_key, secret_access_key)

            storage = S3Storage(client, holder)

            try:
                handler = S3SyncHandler(storage,
                                        local_folder,
                                        sec=DEFAULT_SLEEP_SECS,
                                        log=log)
                handler.setDaemon(True)
                handler.start()
                self.s3_handler = handler

                self.save_s3_info(access_key, secret_access_key, local_folder,
                                  holder, log, encrypt, encrypt_code)

                return handler
            except S3Error, e:
                raise CloudBackupError(e.src, e.err_no, e.msg)
        finally:
            self.s3_lock.release()

    def stop_s3(self, clear_info=True):
        try:
            self.s3_lock.acquire()

            if self.s3_handler is None:
                return

            self.s3_handler.stop()
            self.s3_handler = None

            if clear_info:
                self.remove_s3_info()
        finally:
            self.s3_lock.release()

    def save_s3_info(self,
                     access_key,
                     secret_access_key,
                     local_folder,
                     holder,
                     log=True,
                     encrypt=False,
                     encrypt_code=None):

        if self.s3_handler is None:
            return

        args = locals()
        del args['self']

        save_info('s3', args, lambda s: s)

    def load_s3_info(self):
        info = get_info('s3', lambda s: s)
        return info

    def remove_s3_info(self):
        save_file = get_settings_path(get_info_path(), 's3')

        if os.path.exists(save_file):
            os.remove(save_file)

    def setup_gs(self,
                 access_key,
                 secret_access_key,
                 project_id,
                 local_folder,
                 holder,
                 log=True,
                 encrypt=False,
                 encrypt_code=None,
                 force_stop=True):
        try:
            self.gs_lock.acquire()

            if self.gs_handler:
                return self.gs_handler

            if force_stop and self.gs_handler:
                self.gs_handler.stop()

            if encrypt and encrypt_code:
                client = CryptoGSClient(access_key, secret_access_key,
                                        project_id, encrypt_code)
            else:
                client = GSClient(access_key, secret_access_key, project_id)

            storage = GSStorage(client, holder)

            try:
                handler = SyncHandler(storage,
                                      local_folder,
                                      sec=DEFAULT_SLEEP_SECS,
                                      log=log)
                handler.setDaemon(True)
                handler.start()
                self.gs_handler = handler

                self.save_gs_info(access_key, secret_access_key, project_id,
                                  local_folder, holder, log, encrypt,
                                  encrypt_code)

                return handler
            except GSError, e:
                raise CloudBackupError(e.src, e.err_no, e.msg)
        finally:
            self.gs_lock.release()

    def stop_gs(self, clear_info=True):
        try:
            self.gs_lock.acquire()

            if self.gs_handler is None:
                return

            self.gs_handler.stop()
            self.gs_handler = None

            if clear_info:
                self.remove_gs_info()
        finally:
            self.gs_lock.release()

    def save_gs_info(self,
                     access_key,
                     secret_access_key,
                     project_id,
                     local_folder,
                     holder,
                     log=True,
                     encrypt=False,
                     encrypt_code=None):

        if self.gs_handler is None:
            return

        args = locals()
        del args['self']

        save_info('gs', args, lambda s: s)

    def load_gs_info(self):
        info = get_info('gs', lambda s: s)
        return info

    def remove_gs_info(self):
        save_file = get_settings_path(get_info_path(), 'gs')

        if os.path.exists(save_file):
            os.remove(save_file)
コード例 #4
0
ファイル: environment.py プロジェクト: 520github/CloudBackup
class Environment(object):
    instance = None
    
    vdisk_handler = None
    vdisk_lock = threading.Lock()
    vdisk_token_refresh = None
    
    s3_handler = None
    s3_lock = threading.Lock()
    
    gs_handler = None
    gs_lock = threading.Lock()
    
    def __new__(cls, *args, **kwargs):
        if not cls.instance:
            cls.instance = super(Environment, cls).__new__(
                            cls, *args, **kwargs)
        return cls.instance
    
    def _get_iv(self, astr):
        if len(astr) >= 8:
            iv = astr[:8]
        else:
            iv = astr + '*' * (8 - len(astr))
        return iv
    
    def _get_encrypt(self, iv):
        des = DES(iv)
        return des.encrypt
    
    def _get_decrypt(self, iv):
        des = DES(iv)
        return des.decrypt
    
    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()
            
    def stop_vdisk(self, clear_info=True):
        try:
            self.vdisk_lock.acquire()
            
            if self.vdisk_handler is None:
                return
            
            self.vdisk_handler.stop()
            self.vdisk_handler = None
            self.vdisk_token_refresh.stop()
            self.vdisk_token_refresh = None
            
            if clear_info:
                self.remove_vdisk_info()
        finally:
            self.vdisk_lock.release()
            
    def save_vdisk_info(self, account, password, local_folder, holder,
                        is_weibo=False, log=True, encrypt=False, encrypt_code=None):
        
        if self.vdisk_handler is None:
            return
        
        args = locals()
        del args['self']
        
        save_info('vdisk', args, self._get_encrypt(self._get_iv(account)), 'password')
            
    def load_vdisk_info(self):
        info = get_info('vdisk', lambda s: s)
        if info is None:
            return
        info['password'] = self._get_decrypt(self._get_iv(info['account']))(info.pop('password'))
        return info
            
    def remove_vdisk_info(self):
        save_file = get_settings_path(get_info_path(), 'vdisk')
        
        if os.path.exists(save_file):
            os.remove(save_file)
        
    def setup_s3(self, access_key, secret_access_key, local_folder, holder,
                 log=True, encrypt=False, encrypt_code=None, force_stop=True):
        try:
            self.s3_lock.acquire()
        
            if self.s3_handler:
                return self.s3_handler
            
            if force_stop and self.s3_handler:
                self.s3_handler.stop()
            
            if encrypt and encrypt_code:
                client = CryptoS3Client(access_key, secret_access_key, encrypt_code)
            else:
                client = S3Client(access_key, secret_access_key)
                
            storage = S3Storage(client, holder)
            
            try:
                handler = S3SyncHandler(storage, local_folder, sec=DEFAULT_SLEEP_SECS, log=log)
                handler.setDaemon(True)
                handler.start()
                self.s3_handler = handler
                
                self.save_s3_info(access_key, secret_access_key, local_folder, holder, 
                                  log, encrypt, encrypt_code)
                
                return handler
            except S3Error, e:
                raise CloudBackupError(e.src, e.err_no, e.msg)
        finally:
            self.s3_lock.release()
            
    def stop_s3(self, clear_info=True):
        try:
            self.s3_lock.acquire()
            
            if self.s3_handler is None:
                return
            
            self.s3_handler.stop()
            self.s3_handler = None
            
            if clear_info:
                self.remove_s3_info()
        finally:
            self.s3_lock.release()
            
    def save_s3_info(self, access_key, secret_access_key, local_folder, holder,
                           log=True, encrypt=False, encrypt_code=None):
        
        if self.s3_handler is None:
            return
        
        args = locals()
        del args['self']
        
        save_info('s3', args, lambda s: s)
            
    def load_s3_info(self):
        info = get_info('s3', lambda s: s)
        return info
            
    def remove_s3_info(self):
        save_file = get_settings_path(get_info_path(), 's3')
        
        if os.path.exists(save_file):
            os.remove(save_file)
        
    def setup_gs(self, access_key, secret_access_key, project_id, local_folder, holder,
                 log=True, encrypt=False, encrypt_code=None, force_stop=True):
        try:
            self.gs_lock.acquire()
        
            if self.gs_handler:
                return self.gs_handler
            
            if force_stop and self.gs_handler:
                self.gs_handler.stop()
            
            if encrypt and encrypt_code:
                client = CryptoGSClient(access_key, secret_access_key, project_id, encrypt_code)
            else:
                client = GSClient(access_key, secret_access_key, project_id)
                
            storage = GSStorage(client, holder)
            
            try:
                handler = SyncHandler(storage, local_folder, sec=DEFAULT_SLEEP_SECS, log=log)
                handler.setDaemon(True)
                handler.start()
                self.gs_handler = handler
                
                self.save_gs_info(access_key, secret_access_key, project_id, 
                                  local_folder, holder, log, encrypt, encrypt_code)
                
                return handler
            except GSError, e:
                raise CloudBackupError(e.src, e.err_no, e.msg)
        finally:
            self.gs_lock.release()
            
    def stop_gs(self, clear_info=True):
        try:
            self.gs_lock.acquire()
            
            if self.gs_handler is None:
                return
            
            self.gs_handler.stop()
            self.gs_handler = None
            
            if clear_info:
                self.remove_gs_info()
        finally:
            self.gs_lock.release()
            
    def save_gs_info(self, access_key, secret_access_key, project_id,
                     local_folder, holder,
                     log=True, encrypt=False, encrypt_code=None):
        
        if self.gs_handler is None:
            return
        
        args = locals()
        del args['self']
        
        save_info('gs', args, lambda s: s)
            
    def load_gs_info(self):
        info = get_info('gs', lambda s: s)
        return info
            
    def remove_gs_info(self):
        save_file = get_settings_path(get_info_path(), 'gs')
        
        if os.path.exists(save_file):
            os.remove(save_file)