sregistry/utils/fileio.py
def create_tar(files, output_folder=None):
    '''create_memory_tar will take a list of files (each a dictionary
        with name, permission, and content) and write the tarfile
        (a sha256 sum name is used) to the output_folder.
        If there is no output folde specified, the
        tar is written to a temporary folder.
    '''
    if output_folder is None:
        output_folder = tempfile.mkdtemp()

    finished_tar = None
    additions = []
    contents = []

    for entity in files:
        info = tarfile.TarInfo(name=entity['name'])
        info.mode = entity['mode']
        info.mtime = int(datetime.datetime.now().strftime('%s'))
        info.uid = entity["uid"]
        info.gid = entity["gid"]
        info.uname = entity["uname"]
        info.gname = entity["gname"]

        # Get size from stringIO write
        filey = io.StringIO()
        content = None
        try:  # python3
            info.size = filey.write(entity['content'])
            content = io.BytesIO(entity['content'].encode('utf8'))
        except Exception:  # python2
            info.size = int(filey.write(entity['content'].decode('utf-8')))
            content = io.BytesIO(entity['content'].encode('utf8'))
        pass

        if content is not None:
            addition = {'content': content,
                        'info': info}
            additions.append(addition)
            contents.append(content)

    # Now generate the sha256 name based on content
    if len(additions) > 0:
        hashy = get_content_hash(contents)
        finished_tar = "%s/sha256:%s.tar.gz" % (output_folder, hashy)

        # Warn the user if it already exists
        if os.path.exists(finished_tar):
            msg = "metadata file %s already exists " % finished_tar
            msg += "will over-write."
            bot.debug(msg)

        # Add all content objects to file
        tar = tarfile.open(finished_tar, "w:gz")
        for a in additions:
            tar.addfile(a["info"], a["content"])
        tar.close()

    else:
        msg = "No contents, environment or labels"
        msg += " for tarfile, will not generate."
        bot.debug(msg)

    return finished_tar
def create_tar(files, output_folder=None):
    '''create_memory_tar will take a list of files (each a dictionary
        with name, permission, and content) and write the tarfile
        (a sha256 sum name is used) to the output_folder.
        If there is no output folde specified, the
        tar is written to a temporary folder.
    '''
    if output_folder is None:
        output_folder = tempfile.mkdtemp()

    finished_tar = None
    additions = []
    contents = []

    for entity in files:
        info = tarfile.TarInfo(name=entity['name'])
        info.mode = entity['mode']
        info.mtime = int(datetime.datetime.now().strftime('%s'))
        info.uid = entity["uid"]
        info.gid = entity["gid"]
        info.uname = entity["uname"]
        info.gname = entity["gname"]

        # Get size from stringIO write
        filey = io.StringIO()
        content = None
        try:  # python3
            info.size = filey.write(entity['content'])
            content = io.BytesIO(entity['content'].encode('utf8'))
        except Exception:  # python2
            info.size = int(filey.write(entity['content'].decode('utf-8')))
            content = io.BytesIO(entity['content'].encode('utf8'))
        pass

        if content is not None:
            addition = {'content': content,
                        'info': info}
            additions.append(addition)
            contents.append(content)

    # Now generate the sha256 name based on content
    if len(additions) > 0:
        hashy = get_content_hash(contents)
        finished_tar = "%s/sha256:%s.tar.gz" % (output_folder, hashy)

        # Warn the user if it already exists
        if os.path.exists(finished_tar):
            msg = "metadata file %s already exists " % finished_tar
            msg += "will over-write."
            bot.debug(msg)

        # Add all content objects to file
        tar = tarfile.open(finished_tar, "w:gz")
        for a in additions:
            tar.addfile(a["info"], a["content"])
        tar.close()

    else:
        msg = "No contents, environment or labels"
        msg += " for tarfile, will not generate."
        bot.debug(msg)

    return finished_tar
def create_tar ( files , output_folder = None ) : if output_folder is None : output_folder = tempfile . mkdtemp ( ) finished_tar = None additions = [ ] contents = [ ] for entity in files : info = tarfile . TarInfo ( name = entity [ 'name' ] ) info . mode = entity [ 'mode' ] info . mtime = int ( datetime . datetime . now ( ) . strftime ( '%s' ) ) info . uid = entity [ "uid" ] info . gid = entity [ "gid" ] info . uname = entity [ "uname" ] info . gname = entity [ "gname" ] # Get size from stringIO write filey = io . StringIO ( ) content = None try : # python3 info . size = filey . write ( entity [ 'content' ] ) content = io . BytesIO ( entity [ 'content' ] . encode ( 'utf8' ) ) except Exception : # python2 info . size = int ( filey . write ( entity [ 'content' ] . decode ( 'utf-8' ) ) ) content = io . BytesIO ( entity [ 'content' ] . encode ( 'utf8' ) ) pass if content is not None : addition = { 'content' : content , 'info' : info } additions . append ( addition ) contents . append ( content ) # Now generate the sha256 name based on content if len ( additions ) > 0 : hashy = get_content_hash ( contents ) finished_tar = "%s/sha256:%s.tar.gz" % ( output_folder , hashy ) # Warn the user if it already exists if os . path . exists ( finished_tar ) : msg = "metadata file %s already exists " % finished_tar msg += "will over-write." bot . debug ( msg ) # Add all content objects to file tar = tarfile . open ( finished_tar , "w:gz" ) for a in additions : tar . addfile ( a [ "info" ] , a [ "content" ] ) tar . close ( ) else : msg = "No contents, environment or labels" msg += " for tarfile, will not generate." bot . debug ( msg ) return finished_tar
create_memory_tar will take a list of files (each a dictionary
        with name, permission, and content) and write the tarfile
        (a sha256 sum name is used) to the output_folder.
        If there is no output folde specified, the
        tar is written to a temporary folder.
create_memory_tar will take a list of files ( each a dictionary with name permission and content ) and write the tarfile ( a sha256 sum name is used ) to the output_folder . If there is no output folde specified the tar is written to a temporary folder .