Module refinery.units.formats.archive.xtace
Expand source code Browse git
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from refinery.units.formats.archive import ArchiveUnit
from refinery.lib.thirdparty import acefile
from refinery.lib.structures import MemoryFile
class xtace(ArchiveUnit, docs='{0}{s}{PathExtractorUnit}'):
"""
Extract files from an ACE archive.
"""
def unpack(self, data):
ace = acefile.open(MemoryFile(data, read_as_bytes=True))
for member in ace.getmembers():
member: acefile.AceMember
comment = {} if not member.comment else {'comment': member.comment}
yield self._pack(
member.filename,
member.datetime,
lambda a=ace, m=member: a.read(m, pwd=self.args.pwd),
**comment
)
@classmethod
def handles(cls, data: bytearray) -> bool:
return b'**ACE**' in data[:0x100]
Classes
class xtace (*paths, list=False, join_path=False, drop_path=False, fuzzy=0, exact=False, regex=False, path=b'path', date=b'date', pwd=b'')
-
Extract files from an ACE archive. This unit is a path extractor which extracts data from a hierarchical structure. Each extracted item is emitted as a separate chunk and has attached to it a meta variable that contains its path within the source structure. The positional arguments to the command are patterns that can be used to filter the extracted items by their path. To view only the paths of all chunks, use the listing switch:
emit something | xtace --list
Otherwise, extracted items are written to the standard output port and usually require a frame to properly process. In order to dump all extracted data to disk, the following pipeline can be used:
emit something | xtace [| dump {path} ]
Expand source code Browse git
class xtace(ArchiveUnit, docs='{0}{s}{PathExtractorUnit}'): """ Extract files from an ACE archive. """ def unpack(self, data): ace = acefile.open(MemoryFile(data, read_as_bytes=True)) for member in ace.getmembers(): member: acefile.AceMember comment = {} if not member.comment else {'comment': member.comment} yield self._pack( member.filename, member.datetime, lambda a=ace, m=member: a.read(m, pwd=self.args.pwd), **comment ) @classmethod def handles(cls, data: bytearray) -> bool: return b'**ACE**' in data[:0x100]
Ancestors
Class variables
var required_dependencies
var optional_dependencies
Methods
def unpack(self, data)
-
Expand source code Browse git
def unpack(self, data): ace = acefile.open(MemoryFile(data, read_as_bytes=True)) for member in ace.getmembers(): member: acefile.AceMember comment = {} if not member.comment else {'comment': member.comment} yield self._pack( member.filename, member.datetime, lambda a=ace, m=member: a.read(m, pwd=self.args.pwd), **comment )
Inherited members