Module lib.tools.archiver

Archiver files functions

Expand source code
# Distributed under Pycameresp License
# Copyright (c) 2023 Remi BERTHOLET
# pylint:disable=consider-using-f-string
""" Archiver files functions """
import tools.logger
import tools.filesystem
import tools.exchange
import tools.fnmatch

def download_files(download_filename, path="./config", pattern="*.json", excludes=None, recursive=False):
        """ Download many file into only one file """
        result = True

        tools.logger.syslog("Download %s"%download_filename)
        tools.filesystem.remove(download_filename)

        # Scan directory with pattern
        _, files = tools.filesystem.scandir(path=path, pattern=pattern, recursive=recursive)

        try:
                # Open out file
                out_file = open(download_filename,"wb")

                file_write = tools.exchange.FileWriter()
                # For all files found
                for filename in files:
                        exclude = False
                        if excludes is not None:
                                if type(excludes) == type(""):
                                        excludes = [excludes]

                                if type(excludes) == type([]):
                                        for pattern in excludes:
                                                if tools.fnmatch.fnmatch(tools.filesystem.normpath(filename),pattern):
                                                        exclude = True
                                                        break

                        if exclude is False:
                                tools.logger.syslog("  Download '%s'"%(filename))
                                if file_write.write(filename, None, out_file) is False:
                                        result = False
                                        break
        except Exception as err:
                tools.logger.syslog(err)
                result = False
        finally:
                tools.logger.syslog("Download %s"%("success" if result else "failed"))
                out_file.close()
        return result

def upload_files(upload_filename, directory="/"):
        """ Upload files and write all files """
        result = True
        tools.logger.syslog("Upload %s"%upload_filename)
        try:
                in_file = open(upload_filename,"rb")
                if tools.filesystem.ismicropython():
                        simulated = False
                else:
                        simulated = True

                read_size = tools.filesystem.filesize(upload_filename)
                while in_file.tell() < read_size:
                        file_reader = tools.exchange.FileReader(simulated)
                        if tools.filesystem.ismicropython() is False:
                                directory = "/tmp"

                        res = file_reader.read(directory, in_file)
                        tools.logger.syslog("  Upload %s %s"%(file_reader.filename.get(), "" if res else "failed"))

        except Exception as err:
                tools.logger.syslog(err)
                result = False
        finally:
                tools.logger.syslog("Upload %s"%("success" if result else "failed"))
                in_file.close()
        tools.filesystem.remove(upload_filename)
        return result

Functions

def download_files(download_filename, path='./config', pattern='*.json', excludes=None, recursive=False)

Download many file into only one file

Expand source code
def download_files(download_filename, path="./config", pattern="*.json", excludes=None, recursive=False):
        """ Download many file into only one file """
        result = True

        tools.logger.syslog("Download %s"%download_filename)
        tools.filesystem.remove(download_filename)

        # Scan directory with pattern
        _, files = tools.filesystem.scandir(path=path, pattern=pattern, recursive=recursive)

        try:
                # Open out file
                out_file = open(download_filename,"wb")

                file_write = tools.exchange.FileWriter()
                # For all files found
                for filename in files:
                        exclude = False
                        if excludes is not None:
                                if type(excludes) == type(""):
                                        excludes = [excludes]

                                if type(excludes) == type([]):
                                        for pattern in excludes:
                                                if tools.fnmatch.fnmatch(tools.filesystem.normpath(filename),pattern):
                                                        exclude = True
                                                        break

                        if exclude is False:
                                tools.logger.syslog("  Download '%s'"%(filename))
                                if file_write.write(filename, None, out_file) is False:
                                        result = False
                                        break
        except Exception as err:
                tools.logger.syslog(err)
                result = False
        finally:
                tools.logger.syslog("Download %s"%("success" if result else "failed"))
                out_file.close()
        return result
def upload_files(upload_filename, directory='/')

Upload files and write all files

Expand source code
def upload_files(upload_filename, directory="/"):
        """ Upload files and write all files """
        result = True
        tools.logger.syslog("Upload %s"%upload_filename)
        try:
                in_file = open(upload_filename,"rb")
                if tools.filesystem.ismicropython():
                        simulated = False
                else:
                        simulated = True

                read_size = tools.filesystem.filesize(upload_filename)
                while in_file.tell() < read_size:
                        file_reader = tools.exchange.FileReader(simulated)
                        if tools.filesystem.ismicropython() is False:
                                directory = "/tmp"

                        res = file_reader.read(directory, in_file)
                        tools.logger.syslog("  Upload %s %s"%(file_reader.filename.get(), "" if res else "failed"))

        except Exception as err:
                tools.logger.syslog(err)
                result = False
        finally:
                tools.logger.syslog("Upload %s"%("success" if result else "failed"))
                in_file.close()
        tools.filesystem.remove(upload_filename)
        return result