Module refinery.units.formats.office.xtone

Expand source code Browse git
from __future__ import annotations

from typing import Optional
from uuid import UUID

from refinery.units.formats import PathExtractorUnit, UnpackResult
from refinery.lib.structures import MemoryFile
from refinery.lib.mime import get_cached_file_magic_info


class xtone(PathExtractorUnit):
    """
    Extract embedded files from OneNote documents.
    """
    @PathExtractorUnit.Requires('pyonenote', ['formats', 'office', 'extended'])
    def _pyOneNote():
        import pyOneNote
        import pyOneNote.OneDocument
        return pyOneNote.OneDocument

    def unpack(self, data: bytearray):
        with MemoryFile(memoryview(data)) as stream:
            one = self._pyOneNote.OneDocment(stream)
        for guid, file in one.get_files().items():
            chunk = file['content']
            try:
                extension = file['extension']
            except KeyError:
                extension = F'.{get_cached_file_magic_info(chunk).extension}'
            yield UnpackResult(F'{guid}{extension}', chunk)

    @classmethod
    def handles(cls, data: bytearray) -> Optional[bool]:
        return UUID('7b5c52e4-d88c-4da7-aeb1-5378d02996d3').bytes_le in data

Classes

class xtone (*paths, list=False, join_path=False, drop_path=False, fuzzy=0, exact=False, regex=False, path=b'path')

Extract embedded files from OneNote documents.

Expand source code Browse git
class xtone(PathExtractorUnit):
    """
    Extract embedded files from OneNote documents.
    """
    @PathExtractorUnit.Requires('pyonenote', ['formats', 'office', 'extended'])
    def _pyOneNote():
        import pyOneNote
        import pyOneNote.OneDocument
        return pyOneNote.OneDocument

    def unpack(self, data: bytearray):
        with MemoryFile(memoryview(data)) as stream:
            one = self._pyOneNote.OneDocment(stream)
        for guid, file in one.get_files().items():
            chunk = file['content']
            try:
                extension = file['extension']
            except KeyError:
                extension = F'.{get_cached_file_magic_info(chunk).extension}'
            yield UnpackResult(F'{guid}{extension}', chunk)

    @classmethod
    def handles(cls, data: bytearray) -> Optional[bool]:
        return UUID('7b5c52e4-d88c-4da7-aeb1-5378d02996d3').bytes_le in data

Ancestors

Subclasses

Class variables

var required_dependencies
var console
var reverse
var optional_dependencies

Methods

def unpack(self, data)
Expand source code Browse git
def unpack(self, data: bytearray):
    with MemoryFile(memoryview(data)) as stream:
        one = self._pyOneNote.OneDocment(stream)
    for guid, file in one.get_files().items():
        chunk = file['content']
        try:
            extension = file['extension']
        except KeyError:
            extension = F'.{get_cached_file_magic_info(chunk).extension}'
        yield UnpackResult(F'{guid}{extension}', chunk)

Inherited members